自动闭包@autoclosure
什么是自动闭包
- 自动闭包就是把一个表达式直接自动闭合一个闭包,这样看起来就比较好看了,难到只是为了好看吗?错了,这还是苹果优化性能的方法。为啥这么说类,你一会就会明白了。
func sendRequest(argc1: String, arc2: String, completionHandle: () -> Bool) {
if completionHandle() {
print(argc1, arc2)
}
}
sendRequest(argc1: "5", arc2: "6") { () -> Bool in
return true
}
QQ20170316-164041@2x.png
- 我们不是说自动闭包还以让闭包变得漂亮吗
func sendRequest(argc1: String, arc2: String, completionHandle: @autoclosure () -> Bool) {
if completionHandle() {
print(argc1, arc2)
}
}
sendRequest(argc1: "5", arc2: "6", completionHandle: true)
- 哇就是好漂亮啊,不是说可以传表达式吗?我试试看
sendRequest(argc1: "5", arc2: "5", completionHandle: 3 < 5)
- yes ,没错是不是你又想起了sorted函数了,知道为啥可以那么传参数了吧
什么时候可以使用自动闭包类,
闭包类型是是这样的() -> T
-
不是说自动闭包可以提升性能吗
-
来两个表达式
let conditio1 = 3 + 6 > 5
let condition2 = 5 + 2 < 3
if conditio1 && condition2 {
print("为真")
}
- 我们知道条件1为假,条件2都不用计算了。 conditio1 || conditio2 条件1为真,条件2也不用计算了。这样并不会影响结果,而且还减少了一次计算。这就是性能上有了优化。这和我们的闭包有啥关系类。接着看列子
func logTrue(condition1: () -> Bool, condition2: () -> Bool) {
if condition1() && condition2() {
print("condition1和condition2为真")
}
}
logTrue(condition1: { () -> Bool in //这样写是为了让大家看一下到底是不是我们说的那样
print("执行了condition1")
return 3 + 1 > 10
}) { () -> Bool in
print("执行了condition2")
return 3 + 2 > 20
}
QQ20170316-173117@2x.png
- 大家可以试试其他情况。遇到()-> T 请使用自动闭包,不用谢。
好了自动闭包也说完了,我也就懂这么深了,以后有新新想法在过来补充吧。欢迎您的评论。
网友评论