分享最热门的ios资讯
闭包,老生常谈的一个乳。这次咱们再来唠叨唠叨, 看看能不能发现有用的信息。
作为变量
var double: (Int) -> Int double = { num in return num * 2 } double(2) // 4
这里声明 double 变量为 (Int) -> Int 类型,而且用闭包字面量给他赋值,然后调用它。 这时最常见的用法。
作为 Optionals
当然, Swift 有 Optionals 特性, 闭包还可以作为 Optionals:
var optionalDouble: ((Int) -> Int)? optionalDouble?(2) // nil optionalDouble = { num in return num * 2 } optionalDouble?(2) // 4
我们第一次调用 optionalDouble 的时候, 因为还没有给他初始值, 所以凭据 Optionals 的特性会直接返回 nil。 接下来我们给他赋值, 然后再调用, 就可以返回相应的内容了。
作为 typealias
当然,我们还可以把闭包的界说声明称 typealias ,这样就可以在以后直接界说相同的类型:
typealias DoubleFunc = (Int) -> Int var aliasDouble: DoubleFunc
界说为常量
let constDouble = { num in num * 2 } constDouble(2) //4
作为函数的参数
var array = [1,2,3,4] array.sort({(item1: Int, item2: Int) -> Bool in return item1 < item2})
当然, 还可以简化一些,省去参数类型的声明, 让编译器隐式的找出类型:
array.sort({(item1, item2) -> Bool in return item1 < item2 })
同样, 我们还可以越发简略, 省去闭包的返回值类型声明:
array.sort({(item1, item2) in return item1 < item2 })
如果闭包是函数的最后一个参数, 那么两边的圆括号也是可以省略的:
array.sort{(item1, item2) in return item1 < item2 }
接着, 其实闭包参数名称也可以省略:
array.sort{return $0 < $1 }
因为闭包默认将最后一个语句作为返回值, 所以 return 要害字也是可以省略的:
array.sort{ $0 < $1 }
当然, 其实 sort 函数接受的不过是一个闭包,比如我们这个用于两个数值对照, 我们不必一定要自己实现, 可以这样:
array.sort(<)
< 在 Swift 其实是一个函数, 用于比较两个数值的大小,我们直接把它传进去完全符合语法。
结尾
闭包的表演到此结束, 一步一步深入后,发现闭包的观点其实很灵活也很复杂。国外有一个大神甚至把闭包的这些特性专门做了一个主页,很有意思, 大家也有兴趣的话也可以观摩一下: http://fuckingclosuresyntax.com。
用意志战胜身体的惰性!
本文由 姬長信 创作,文章地址:https://blog.isoyu.com/archives/792.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:7 月 21, 2016 at 11:59 上午