swift closure闭包
//闭包的几种书写方式 var names = [13,345,2,323,1,8,21,42,34,32,42,1] // 1 func compares(args: Int, args2: Int) ->Bool { return args > args2 } var names2 = names.sort(compares) print(names2) // 2 names2 = names.sort({(args: Int, args2: Int) -> Bool in return args < args2 }) print(names2) // 3 names2 = names.sort({$0 > $1}) print(names2) func customer_fn(cu_fn: ()-> String) { let str: String = cu_fn() print("customer accpect args for closure : \(str)") } customer_fn({" this is closeure "}) //autoclosure func customer_fn(@autoclosure cu_fn: ()-> String) { let str: String = cu_fn() print("customer accpect args for closure : \(str)") } customer_fn(" this is closeure2 ") //4 此种情况比较特殊,只适用于一句表达式,做比较操作,才可用 names2 = names.sort(>) print(names2) //尾随闭包 //使用场景:需要传入一个闭包,并且为最后一个参数时 names2 = names.sort() { $0 > $1} print(names2) //使用场景: 需要传入一个闭包,有且只有一个参数时 names2 = names.sort {$0 <= $1} print(names2) // 闭包捕获上下文变量,并在生命周期内存储变量值,常例: 嵌套函数种 func makeIncrementer(forIncrement amount: Int) -> () -> Int { var runningTotal = 0 func incrementer() -> Int { runningTotal += amount return runningTotal } return incrementer } let increment_fn = makeIncrementer(forIncrement: 10) print(increment_fn()) print(increment_fn())