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 {  |