How To: Pass Data Between View Controllers In Swift
多个消息传递:使用代理
使用闭包会导致代码臃肿。
委托者要调用多个代理对象:使用闭包
因为委托者中的代理对象保存的是个引用,若设置多个代理对象,那么只有最后一个引用的设置会生效。
单例不要用代理
1.使用闭包
Passing Data Back With a Closure
在B中:定义一个闭包属性,并且将数据传给闭包的参数
1 | class BViewController: UIViewController{ |
在A中:
1 | class AViewController: UIViewController{ |
2.使用代理
协议
1 | protocol PizzaDelegate: AnyObject { |
在A中,实现代理函数
1 | class AViewController: PizzaDelegate { |
在B中,将数据传给代理函数的参数
1 | class BViewController { |
3.使用NotificationCenter
⚠️:若是接收通知之后的处理有UI更新操作,一定要事先将线程调到主线程。
在A中,定义通知名称作为类属性,在界面加载时添加观察,实现观察响应函数
1 | class AViewController: UIViewController { |
在B中,发出通知
1 | class BViewController { |
4.使用属性和函数
在B中,声明一个A的引用,然后调用A的函数
1 | class BViewController: UIViewController { |
在A中,生成B的对象时,B对象中的指向A的引用赋值为swlf
1 | class AViewController: UIViewController { |