Swift自动闭包

什么是自动闭包

  • 自动闭包就是把一个表达式直接自动闭合一个闭包,这样看起来就比较好看了,难到只是为了好看吗?错了,这还是苹果优化性能的方法。为啥这么说类,你一会就会明白了。

func sendRequest(argc1: String, arc2: String, completionHandle: () -> Bool) {
if completionHandle() {
print(argc1, arc2)
}
}
sendRequest(argc1: "5", arc2: "6") { () -> Bool in
return true
}
  • 我们不是说自动闭包还以让闭包变得漂亮吗

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
}