Swift观察者模式

用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()

时间: 2024-08-11 00:51:46

Swift观察者模式的相关文章

Swift中KVC和KVO的使用

原创BLog,转载请注明出处 Swift中使用KVC和KVO的类都必须必须继承自NSObject KVC key-value coding 是一种间接访问对象的机制 key的值就是属性名称的字符串,返回的value是任意类型,需要自己转化为需要的类型 KVC主要就是两个方法 (1)通过key设置对应的属性 (2)通过key获取对应的属性 举例 class TestForKVC:NSObject{ var hwcCSDN = "hello world" } var instance =

Swift &#160;之 RxSwift(1)

RxSwift 官方文档结构 Introduction: Subjects Transforming Observables Filtering Observables Combining Observables Error Handing Operators Observable Utility Operators Conditional and Boolean Operators Mathematical and Aggregate Operators Connectable Observa

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

1,通知(NSNotification)介绍 这里所说的通知不是指发给用户看的通知消息,而是系统内部进行消息传递的通知.要介绍通知之前,我们需要先了解什么是观察者模式. 观察者模式 (Observer):指一个对象在状态变化的时候会通知另一个对象.参与者并不需要知道其他对象的具体是干什么的 .这是一种降低耦合度的设计.常见的使用方法是观察者注册监听,然后在状态改变的时候,所有观察者们都会收到通知. 在 MVC 里,观察者模式意味着需要允许 Model 对象和 View 对象进行交流,而不能有直接

Swift 中枚举

Swift 中枚举高级用法及实践 字数11017 阅读479 评论0 喜欢20 title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [APPVENTURE]categories: [Swift 进阶]permalink: advanced-practical-enum-examples 原文链接=http://appventure.me/2015/10/17/advanced-practical-enum-examples/作者=Benedik

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

这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Swift中调用这种C语言风格的API比较麻烦,但是在OS X和iOS开发过程中,有时候使用Core Foundation框架的API是非常方便的,例如在与C语言混合编码的时候. Core Foundation框架与Foundation框架紧密相关,他们具有与相同的接口,但是不同.Core Founda

Swift—Cocoa Touch设计模式-备

目标(Target)与动作(Action)是iOS和OS X应用开发的中事件处理机制.   问题提出 如图所示是一个ButtonLabelSample案例设计原型图,其中包含一个标签和一个按钮,当点击按钮的时候,标签文本会从初始的Label替换为HelloWorld. ButtonLabelSample案例首先要解决的问题是:按钮点击事件后有谁负责响应事件?谁进行事件处理?要答这个问题,可以打开ButtonLabelSample案例故事板文件Main.storyboard,如图所示,OK按钮是在

Swift 属性值监测

大家一定很熟悉Object-c中的观察者模式吧.Swift提供了一种更加简单的实现方式 当我们需要对对象的属性值进行赋值的时候,可以使用willSet和didSet进行对象属性值变化的观察. 我们直接看一个例子吧.创建一个类 Student 对属性 name进行监测 首先是Student类的定义 class Student{ init(name:String){ userName=name; } var userName:String=""{ willSet{ println(&quo

Swift 响应式编程 浅析

这里我讲一下响应式编程(Reactive Programming)是如何将异步编程推到一个全新高度的. 异步编程真的很难 大多数有关响应式编程的演讲和文章都是在展示Reactive框架如何好如何惊人,给出一些在非常复杂的情况下,只需几行代码就可以搞定的例子.例子么?我这里有一段基于RxSwift的聊天程序的代码: socket.rx_event .filter({ $0.event == "newMessage" && $0.items?.count > 0})

Apple Swift编程语言新手教程

Apple Swift编程语言新手教程 作者: 日期: gashero 2014-06-03 FROM:http://gashero.iteye.com/blog/2075324 文件夹 1   简单介绍 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的