- // 第二种方式:使用闭包方式
- // 完整闭包写法是在花括号内有参数列表和返回值,用关键字in表明闭包体的开始
- // (firstString: String, secondString: String) 闭包参数列表
- // -> Bool 指明闭包返回值类型是Bool
- // in关键字表明闭包体的开始
- reversed = sort(names, { (firstString: String, secondString: String) -> Bool in
- return firstString > secondString
- })
- /*
- * 尾随闭包(Trailing Closures)
- * 如果函数需要一个闭包参数作为参数,且这个参数是最后一个参数,而这个闭包表达式又很长时,
- * 使用尾随闭包是很有用的。尾随闭包可以放在函数参数列表外,也就是括号外。如果函数只有一个参数,
- * 那么可以把括号()省略掉,后面直接跟着闭包。
- */
- // Array的方法map()就需要一个闭包作为参数
- let strings = numbers.map { // map函数后面的()可以省略掉
- (var number) -> String in
- var output = ""
- while number > 0 {
- output = String(number % 10) + output
- number /= 10
- }
- return output
- }
格式
()->()
闭包可选 是否为空可以强行解包
var comblock:(()->())?
comblock?()
跳转 传值时 可以判断是否为空
第一个页面
let vc = WorkindetailViewController()
vc.workModer = model
//返回时
vc.comblock = {
//返回时的改变值
print(self.model.testname)
}
navigationController?.pushViewController(vc, animated: true)
print("点击")
第二个页面
@objc func click(){
workModer?.testname = "肯定"
//不用判断
comblock?()
navigationController?.popViewController(animated: true)
}