Swift语言精要 - 浅谈代理模式(Delegate)

在iOS编程中,我们经常谈到代理代理,也就是delegate,那么什么是代理呢?

我们来看一下cocoa对它的描述:

Delegation is Cocoa’s term for passing off some responsibilities of an object to another

顾名思义:

代理是把职责从一个对象传到另一个对象。

其实,如果编写过Java或者C#程序的朋友应该知道,我们在设计的时候经常使用到接口和组合,道理是一样的。

看一下下面的代码:

 

首先,我们定义一个协议

protocol SaveMediaDelegate {
    func save()
}

 

然后,我们把这个协议组合到我们的业务逻辑类中去

class MyComputer {
    var delegate : SaveMediaDelegate?

    func saveInfo() {
      // Check to see if the delegate is there, then call it
      delegate?.save()
    }
}

 

接着,我们实现协议的不同表现形态

class SaveToDisk : SaveMediaDelegate {
    func save() {
        println("Saving to disk...")
    }
}

class SaveToUsb : SaveMediaDelegate {
    func save() {
        println("Saving to usb...")
    }
}

 

然后,我们把我们的协议实现类注入到我们的业务类中去(DI - Dependency Injection)

let myComputer = MyComputer()
myComputer.saveInfo() // does nothing

let diskMedia = SaveToDisk()
myComputer.delegate = diskMedia
myComputer.saveInfo() // prints "Saving to disk..."

let usbMedia = SaveToUsb()
myComputer.delegate = usbMedia
myComputer.saveInfo() // prints "Saving to usb..."

 

很简单吧,就是这么简单!

 

时间: 2024-10-02 09:31:13

Swift语言精要 - 浅谈代理模式(Delegate)的相关文章

Swift语言精要 - 浅谈结构体(Struct)

CGRect, CGSize, CGPoint这些是 . String, Int, Array, Dictionary这些我们经常用的也是结构体(Struct).   那么结构体(Struct)到底是什么呢? 学过C语言的朋友一定知道它是什么,在这里我就不多说了,你懂的. 我想说的重要的事情是,你必须搞清楚Struct和类的区别,在Swift中这点特别重要.   一下几点区别: 1) 结构体(Struct)不支持继承,而类(Class)则支持. 2) 结构体(Struct)有一个成员初始化器(m

网站建设:浅谈颜色模式

浅谈颜色模式 你有没有这种感觉,一幅色彩生动亮丽的图象通过彩色喷墨打印机打印出来,颜色变得灰暗难看,尽管打印机是高质量输出?不过在你责备你的打印机之前,我想问一问,你的图象是什么颜色格式? "颜色就是颜色,还有什么格式?" 是的,颜色也存在着各种格式. 打开你的Photoshop,看看Image菜单下的Mode项,里面有一长串的名字,那些都是什么?让我们慢慢道来. RGB颜色模式 我们每天面对的显示器便是根据这种特性,由RGB组成颜色.这就是RGB颜色模式的基础. 显示器是通过发射三种

浅谈jquery中delegate()与live()

  这篇文章主要介绍了浅谈jquery中delegate()与live()的相关资料,需要的朋友可以参考下 delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序 例如给id是showspan的div中的span标签添加事件 ? 1 2 3 4 5 6 7 8 9 10 <div id="showspan"><span>showspan**showspan</span></div> <span>

精解Java中代理模式的实现

简介摘要: 代理模式是GOF设计模式中的一种,常用于权限模块的架构设计,其根本的原理是通过将一个代理对象交给调用者,使得调用者不能直接使用相应的功能模块,所 有的调用被传递给代理对象,代理对象负责对真实模块完成调用,在调用者与被调用者之间建立了一个隔离带,我们可以使 代理模式是GOF设计模式中的一种,常用于权限模块的架构设计,其根本的原理是通过将一个代理对象交给调用者,使得调用者不能直接使用相应的功能模块,所有的调用被传递给代理对象,代理对象负责对真实模块完成调用,在调用者与被调用者[bei t

Swift语言精要 - 扩展(Extension)

swift的Extension用户在不访问代码的情况下扩展基本结构类型或自定义类 extension Int { var doubled : Int { return self * 2 } func multiplyWith(anotherNumber: Int) -> Int { return self * anotherNumber } } 测试代码如下: 2.doubled // = 4 4.multiplyWith(32) // = 128   扩展甚至还可以使类型实现某个协议 下面这个

Swift语言精要 - Operator(运算符重载)

运算符重载 Swift的这一语言特性或许应该启发于C++ class Vector2D { var x : Float = 0.0 var y : Float = 0.0 init (x : Float, y: Float) { self.x = x self.y = y } func +(left : Vector2D, right: Vector2D) -> Vector2D { let result = Vector2D(x: left.x + right.x, y: left.y + r

Android开发:浅谈MVP模式应用与内存泄漏问题解决

最近博主开始在项目中实践MVP模式,却意外发现内存泄漏比较严重,但却很少人谈到这个问题,促使了本文的发布,本文假设读者已了解MVP架构. MVP简介 M-Modle,数据,逻辑操作层,数据获取,数据持久化保存.比如网络操作,数据库操作 V-View,界面展示层,Android中的具体体现为Activity,Fragment P-Presenter,中介者,连接Modle,View层,同时持有modle引用和view接口引用 示例代码 Modle层操作 public class TestModle

浅谈O2O模式给汽车厂商带来的机会

最近一段时间,互联网业内人士热捧O2O(online2offline),认为它是在B2C.C2C之后,一种新型的互联网商业模式,结合传统商业和互联网.但是大部分的人只关注在人们日常娱乐和生活为中心的酒吧.KTV.餐馆.加油站.理发店.健身房.干洗店等领域,O2O给一些重要的传统行业--例如汽车行业,也可以带来的机会没有看到.在这里,就分析了O2O为什么可以成为汽车厂商开展电子商务的试金石. O2O的基本概念: O2O也就是Online To Offline,它瞄准的是无法搬到网上的实际体验和服务

浅谈Pinterest模式带给我们什么?

当我看到有报道说Pinterest推荐的流量已经超过了Google++. Twitter,首先我是激动的感觉似乎这是在预示着在国内肯定也会有同类的产品流量超过微博,但会不会是类Pinterest产品那就只能等历史来揭秘吧,其次我是在想到底Pinterest模式带给我们什么了,而我们又需要用怎样的眼光去看待Pinterest的模式. Pinterest是一个基于视觉图片分享社交型的目录网站,而且在网站中用户可以将自己感兴趣的东西用来"钉"在图板(PinBoard)上并且用瀑布流的模式来展