Swift闭包类似OC的代码块(block)
语法
{ (参数1(可无可有) ) -> 返回值类型(可无可有) in
执行的代码
}
先来定义一个 有参数,有返回值 闭包
//计算两个数值的和
// 定义执行的代码块,赋值给一个常量
let calculate = { (item1 : Int , item2 : Int) ->Int in
return item1 + item2
}
//当我们传值后,会立即执行代码块,根据有无返回值
let result = calculate(200,50)
print(result)
//运行结果 250
实际项目中,
举个例子: 购买商品订单结算页面,结算前你必须要填入收货地址(这只是其中一个必选项),当我从收货地址页面选择好地址时,要显示在订单页面给客户看到,这是我只需要一个闭包就能完成(当然 代理也是能实现的)
//在订单控制器 (OrderlistController) 执行闭包函数
let addressController = AddressController()//地址选择页面
//闭包执行区
addressController.goodsAddress = { [weak self] (address:String) in
//赋值当前控件 显示收货地址
self.addressLable.text = address
}
//地址控制器 (AddressController) 选择收货地址
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let addressModel = AddressListArray[indexpath.row] else{return}
//闭包赋值操作, 当闭包赋值执行时, 会立即调用 闭包执行区
goodsAddress(addressModel.name)//addressModel.name 指地址名称
}