用swift写一个观察者模式,集合了swift语言中类,数组,协议,方法,字符串,条件控制语句等一些语法。
简单介绍下观察者模式,在观察者模式中,会改变的是主题的状态以及观察者的数目。用这个模式,可以改变依赖于主题状态的对象,去不必改变主题。

//main.swift
//Observer(观察者模式)
//Created by jy on 15/4/26.
//Copyright (c) 2015年 jy. All rights reserved.
 
import Foundation
//观察者模式中,会改变的是主题的状态以及观察者的数目。用这个模式,可以改变依赖于主题状态的对象,去不必改变主题。
//主题和观察者都使用协议:观察者利用主题的协议向主题注册,而主题利用观察者协议(接口)通知观察者。这样可以让两者运作正常,又同时具有松耦合的特点
//定义协议,观察者要实现的
protocol Observerable{
    func update();
}
//观察者实现协议
class Subscriber : Observerable{
    //定义属性状态
    func update() {
        println("Callback")
    }
}
/**
* 主题
*/
class Paper{
    //定义空数组
    var observers = Array<Subscriber>()
    //注册观察者
    func register(sub:Subscriber){
        self.observers.append(sub)
    }
    //外部统一访问
    func trigger(){
        var count = self.observers.count;
        //判断是否注册为空
        if count != 0 {
            for obs in self.observers {
                //通知
                obs.update()
            }
        }
    }
}
var paper = Paper()
//观察者
var sub1 = Subscriber()
var sub2 = Subscriber()
//注册
paper.register(sub1)
paper.register(sub2)
paper.trigger()

Swift观察者模式的更多相关文章

  1. 设计模式-(10)观察者模式 (swift版)

    一,概念 观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式.GOF给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它 ...

  2. iOS开发--Swift RAC响应式编程初探

    时间不是很充足, 先少说点, RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, ...

  3. 从0开始学Swift笔记整理(五)

    这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...

  4. 如何在 iOS 8 中使用 Swift 实现本地通知(上)

    当你的应用在后台运行时,可以简单地使用本地通知把信息呈现给用户.它可以允许你显示 提醒.播放提示音和数字角标(badge).本地通知可以被以下的事件触发:计划好的时间点或者用户进入和离开某个地理区域. ...

  5. Swift - 使用NSNotificationCenter发送通知,接收通知

    转载自:http://www.mamicode.com/info-detail-1069228.html 标签: 1,通知(NSNotification)介绍 这里所说的通知不是指发给用户看的通知消息 ...

  6. iOS开发--Swift RAC响应式编程

    时间不是很充足, 先少说点, RAC的好处是响应式编程, 不需要自己去设置代理委托, target, 而是主要以信息流(signal), block为主, 看到这里激动吧, 它可以帮你监听你的事件, ...

  7. Swift—Cocoa Touch设计模式-备

    目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制.   问题提出 如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个标签和一个按钮,当点击 ...

  8. Swift 响应式编程 浅析

    这里我讲一下响应式编程(Reactive Programming)是如何将异步编程推到一个全新高度的. 异步编程真的很难 大多数有关响应式编程的演讲和文章都是在展示Reactive框架如何好如何惊人, ...

  9. Swift Enum 枚举

    前言 枚举是一种自定义的数据类型,在 Swift 中枚举类型拥有相当高的自由度.在 Swift 语言中枚举是一级类型,它拥有在其他语言中只有类才拥有的一些特性,比如实例方法,实例构造器等. 枚举声明的 ...

随机推荐

  1. [HDU 1535]Invitation Cards[SPFA反向思维]

    题意: (欧洲人自己写的题面就是不一样啊...各种吐槽...果断还是看晕了) 有向图, 有个源叫CCS, 求从CCS到其他所有点的最短路之和, 以及从其他所有点到CCS的最短路之和. 思路: 返回的时 ...

  2. 使用DataReader读取数据

    List<User> allUsers = new List<User>(); SqlConnection conn = new SqlConnection(连接字符串); S ...

  3. Code Complete阅读笔记(三)

    2015-05-26   628   Code-Tuning Techniques    ——Even though a particular technique generally represen ...

  4. wince下写入数据到csv/txt文件中

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  5. 如何循序渐进有效学习 JavaScript?

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:宋学彦链接:http://www.zhihu.com/question/19713563/answer/23068003来源: ...

  6. Linux中Firefox——Firebug插件安装及使用

    Firebug的安装方法即打开方式同httpfox Firebug使用指南: Firebug可以随时编辑页面:在HTML标签中,点击窗口上方的"inspect"命令,然后再选择页面 ...

  7. mysql函数全解析

    本文摘自:http://www.cnblogs.com/cocos/archive/2011/05/06/2039469.html mysql函数大全 对于针对字符串位置的操作,第一个位置被标记为1. ...

  8. css 背景图片拉伸[转]

    http://www.jeasyuicn.com/css-background-image-stretching.html background-image:url(bg.png); -moz-bac ...

  9. 关于python的面向对象编程

    先写上代码,有代码才好理解: #filename:classdemo.py class test: '''just person''' a=1 b=2 c=0 def __init__(self): ...

  10. Spring boot 提高篇

    Spring boot 提高篇 上篇文章介绍了Spring boot初级教程:构建微服务:Spring boot 入门篇,方便大家快速入门.了解实践Spring boot特性:本篇文章接着上篇内容继续 ...