delegate允许类或者结构体将需要它们负责的功能代理给其他类型的实例。代理模式能够用来响应特定的动作,或者结构外部数据源提供的数据,且不需要关心外部数据源的类型。
下面是实现一个简单代理的代码:
- 定义proto
protocol TestDelegate: class {
func line() -> Int
func row() -> Int
}
- 定义class,在class中定义一个TestDelegate类型变量
class DelegateTestClass {
var delegate: TestDelegate? {
didSet {
self.printLineAndRow()
}
}
func printLineAndRow() {
let index = (delegate?.line(), delegate?.row())
print(index)
}
}
- 定义class,遵循TestDelegate
class TestClass: UIViewController, TestDelegate {
var delegateTestClass = DelegateTestClass()
override func viewDidLoad() {
delegateTestClass.delegate = self
}
func line() -> Int {
return 1
}
func row() -> Int {
return 2
}
}
运行程序,控制台打印出下面信息: