不知道原理,就知道这么用的,皮毛上的那一点。
寻思着把以前的项目改成swift的,结果了,,,
反向传值
一、
//类似于OC中的typedef
typealias sendValueClosure=(string:String)->Void//1
二、
//声明一个闭包
var myClosure:sendValueClosure?
//下面这个方法需要传入上个界面的someFunctionThatTakesAClosure函数指针
func initWithClosure(closure:sendValueClosure?){
//将函数指针赋值给myClosure闭包,该闭包中涵盖了someFunctionThatTakesAClosure函数中的局部变量等的引用
myClosure = closure
}
三、在适当的时候进行赋值
func action(cityName:String){
//判空
if (myClosure != nil){
//闭包隐式调用someFunctionThatTakesAClosure函数:回调。
myClosure!(string: cityName)
}
}
第一个界面
一、
let second = CitysTableViewController()
//将当前someFunctionThatTakesAClosure函数指针传到第二个界面,第二个界面的闭包拿到该函数指针后会进行回调该函数
second.initWithClosure(someFunctionThatTakesAClosure)
二、
func someFunctionThatTakesAClosure(string:String) -> Void {
cityName = string
nameLabel.text = string
requestData()
self.tableView.reloadData()
}