Swift3.0来实现传值-->前后两个控制器的反向传值,这里传递了一个地址的model
第一个类
let address = MZAddressManagerViewController.init()
address.orderInfo = self.orderInfo
//将当前someFunctionThatTakesAClosure函数指针传到第二个界面,第二个界面的闭包拿到该函数指针后会进行回调该函数
address.initWithClosure(closure: someFunctionThatTakesAClosure)
self.navigationController?.pushViewController(address, animated: true)
实现这个方法
func someFunctionThatTakesAClosure(newOrderInfo:MZExchangeOrderModel) -> Void {
// function body goes here
self.orderInfo = newOrderInfo
self.myTableView?.reloadData()
}
第二个类
var orderInfo:MZExchangeOrderModel?//从第一个类传过来的模型,我们要做的是把模型的值改动之后反向传递过去
typealias sendValueClosure=(_ newOrderInfo:MZExchangeOrderModel)->Void
var myClosure:sendValueClosure?
实现这个方法
func initWithClosure(closure:sendValueClosure?){
//将函数指针赋值给myClosure闭包,该闭包中涵盖了someFunctionThatTakesAClosure函数中的局部变量等的引用
myClosure = closure
}
在第二个返回的点击事件里将修改之后的模型通过block返回
if (myClosure != nil){
//闭包隐式调用someFunctionThatTakesAClosure函数:回调。
myClosure!(self.orderInfo!)
_ = self.navigationController?.popViewController(animated: true)
}
参考了http://www.myexception.cn/operating-system/1684429.html