代理有什么用?
实现不同组件间传值
比如A中改变了某个属性的值,在改变的同时要B要做出相应的变化,此时就可以用代理。
A、B 可以是ViewController,也可以是UIView和任何类和结构体。
使用方法
以 A 通知 B 为例
首先,定义一个 协议 protocol, 继承自NSObjectProtocol,在其中定义方法。(这里很像接口的定义,更像是Android中MVP中对P的定义)
protocol ADelegate : NSObjectProtocol {
func callback(index: Int?)
}
其次,在A中添加一个 继承自这个协议的弱引用属性,weak是为了避免循环引用等问题。
class A {
...
weak var delegate: ADelegate?
}
然后,B要继承自这个协议,并实现协议中定义的方法。
extension B: ADelegate {
func callback(index: Int?) {
...
}
}
最后, B中要有A类的实例,才可以建立代理
class B {
...
func method() {
let a = A()
a.delegate = self
...
}
}
这样就基本上算是建立了代理
那么,当有一个时机来改变A中的属性的值的时候,就可以用了(这里主要是用index做示范,如果要传递不同的数据,需要在定义协议中的方法里构建好函数的参数)
例如,点击事件是触发时机时
class A {
var index: Int?
...
@objc func onClick() {
...
delegate?.callback(index: index)
}
}
当点击事件调用时,会通过delegate调用回调方法。 即调用 B 中实现的 callback 方法。
即在A中是某个时机下,让B执行某个方法。
一般用于界面间的反向传值。
网友评论