在oc中我们使用block进行传值,相比其他的方法更加紧凑,在swift中闭包,完全保持这个优点。
下面我们来看看闭包传值的三部曲,
我们首先假设一种场景,我们从A控制器跳转B控制器,在B控制器,跳转回A控制器的时候,我们需要将B控制器的值传回A控制器,我们看看怎么做;
第一步,在B控制器定义一个闭包类型;
//声明一个闭包类型,并将该类型的闭包作为B控制器的属性
typealias myClosure = (Courier)->Void
import UIKit
class SelectExpressTableViewController: UITableViewController {
var closure1:myClosure?
}
//第二步。在A控制器跳转到B控制器时,给B控制器的闭包属性赋值
//闭包传值并跳转;
func addExp(){
let vc = SelectExpressTableViewController()
//给将要跳转的控制器的闭包属性赋值;
vc.closure1 = { (cour:Courier) ->Void in
self.receiptView.ExpTF.text = cour.name
self.receiptView.expNo=cour.id
print("传值:"+cour.name!)
}
self.navigationController?.pushViewController(vc, animated: true)
}
//在B控制器跳转回A之前,回调闭包,并将B控制器的中需要传回来的参数,通过闭包传出来,用法和BLOCK完全一样,只是写法不同而已
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let courier :Courier = self.couriersArray[indexPath.row]
if self.closure1 != nil{
self.closure1!(courier)
}
self.navigationController?.popViewController(animated: true)
}