Swift学习笔记系列——(6)闭包
Tags: Swift 学习笔记 发布时间:2015-07-13 Swift学习笔记系列——(6)闭包闭包什么是闭包可以当作参数传递使用的代码块。 闭包的三种形态全局函数 闭包表达式没有名字捕获上下文数据 简化闭包表达式的途径
闭包的一种实现:函数 闭包表达式语法{ (parameters) -> return type in statements } 参数可以用常量和变量的,也可以用inout参数,但是不能有默认值。使用可变参数的条件是给其命名,而且在参数列表最后。 in关键字分割闭包的参数返回类型和闭包体 闭包表达式完整写法reversed = names.sort({ (s1: String,s2: String) -> Bool in return s1 > s2 }) 写在一行的样子reversed = names.sort( { (s1: String,s2: String) -> Boolinreturns1 > s2 } ) 省去类型声明后类型根据上下文推测 单一返回值,省掉return关键字reversed = names.sort( { s1,s2ins1 > s2 } ) 简化参数名字后reversed = names.sort( {
用操作符函数后reversed = names.sort(>) Trailling 闭包如果你想要传递一个闭包表达式给函数的最后一个参数,同时这个闭包又非常长,这时你可以写一个Trailing 闭包作为替代。一个Trailing 闭包是被写在函数圆括号之外(或之后)的闭包表达式 func someFunctionThatTakesAClosure(closure: () -> Void) { // here's how you call this function without using a trailing closure: someFunctionThatTakesAClosure({ // closure's body goes here }) // here's how you call this function with a trailing closure instead: someFunctionThatTakesAClosure() { // trailing closure's body goes here } 如果一个闭包表达式作为一个函数的唯一参数同时这个闭包表达式又是一个Trailing 闭包,这种情况下调用函数时你不需要在函数名字后写一对圆括号了。 如果只有一个trailing参数,圆括号可以省了 let strings = numbers.map { 捕获值捕获的内容有引用也有值副本,不由程序员控制,Swift会做好。 闭包是引用类型的本章思维导图 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |