在iOS开发学习过程中,许多的地方有使用到「代理模式」的,由于自己对于开发模式之类的知之甚少,所以理解起来觉得有些吃力。于是便花了一些时间学习这个内容。下面所记录的内容,便是我学习之后对「代理模式」的认识。
先说说代理的使用场景:
假设有两个对象,ObjectA和ObjectB,当我们在ObjectB中输入了一条信息,然后要在ObjectA上显示出来,这里就需要用到代理了。
简单说来,代理模式,是一种简单而功能强大的设计模式,这种模式用于一个对象“代表”另外一个对象和程序中其他的对象进行交互,两个对象,当一个对象不方便处理一些事的时候,就可以交由代理来做。
在iOS开发中,当我们需要将ObjectA作为ObjectB的代理时,实现步骤如下:
1 | 1. 在ObjectB中定义代理协议。 |
实现步骤即是这样,下面通过一个例子来说明如何实现两对象之间的代理模式。
Single View Application项目:
ViewController及其视图,新建视图,添加组件先将原有的ViewController及stroyboard中的视图删除掉。
拖入两个新的ViewController组件,在第一个视图中添加上一个Label和Button。
在第二个View上添加上Text Field和Button。调节位置,修改按钮上的文字。
将第一个视图指定为初始视图。选中第一个视图中的Button,拖动到第二实图,在弹出的菜单中选择「Model」。最后的效果,如图所示:

先创建两个新的文件,分别为FirstViewController和SecondViewController,模板为Cocoa Touch Class,都基于UIViewController类。
将类与实图进行绑定,第一个视图绑定到FirstViewController,第二们绑定到SecondViewController。
先在SecondViewController.swift中添加上代理协议:
1 | // 1 |
给SecondViewController添加一个代理变量:
1 | // 2 |
在这类里面,就可以写上调用代理方法的代码了,在编写方法之前,需要给TextField一个变量名:
1 | @IBOutlet weak var textField: UITextField! |
当点击第二个视图中的「确定」按钮之后,就向第一个视图发送消息,代码如下:
1 | // 3 |
下面一步,就是到消息的接收视图中写实现代理的方法。
1 | class FirstViewController: UIViewController, SecondViewControllerDelegate { |
接着去实现方法:
1 | // 4 |
// 5
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var secondView = SecondViewController()
if segue.identifier == “next” {
secondView = segue.destinationViewController as SecondViewController
secondView.delegate = self
}
}
1 |
|
label => 第一视图中的Label
textField => 第二个视图中的TextField
didClick => 第二个视图中Button
## 源码地址:
<http://git.oschina.net/wwq0327/SwiftDelegateDemo>