很多初学者一接触到delegate简直一头雾水,傻傻分不清到底谁是代理。 这里我告诉大家一个我常用的思维,不用管谁是代理谁是委托者,记住以下几点就可以了。
谁要传值谁就申明代理协议和代理属性
举个例子:比如我们这个场景,B要给A传值,那B就应该申明代理协议和代理属性,A就是B的代理,很简单吧!
B界面
1.制定协议(不写NSObjectProtocol暂时不会报错,但是写属性是无法写weak)
protocol MyDelegate:NSObjectProtocol {
//设置协议方法
func returnValue(text:String)
}
//在swift中,制定协议需要遵守NSObjectProtocol协议,除了类可以遵守协议,结构体也可以遵守协议
//在OC中我们制定协议,通常继承自NSObject,可以这样理解,所有继承自NSObject的对象都可以实现协议方法(同样我们也可以指定哪些对象可以实现我们制定的协议方法)
2.用weak定义代理
weak var delegate: MyDelegate?
3.判断代理是否存在,让代理去执行方法
func returnValue() {
//'?'代替了responsed
delegate?.returnValue(text: self.textF.text!)
}
A界面
1.遵守协议
classViewController:UIViewController,MyDelegate{ //遵守协议
2.设置代理为self
secondVC?.delegate = self
3.实现协议方法
func returnValue(text: String) {
}
github下载地址Demo:https://github.com/liuguilin/delegate