// 自动闭包
/*
1.只支持 ()->T 格式
2.有无@autoclosure 构成了函数的重载
3.空合运算符使用了自动闭包
4.有可能延时执行,不一定会执行
*/
//函数判断v1大于0返回v1,否则返回v2
func getFirstNum(_ v1:Int,_ v2:Int) -> Int{
return v1>0 ? v1:v2
}
//当v2需要通过一个函数获取数值时
func getv2() -> Int{
let a = 5
let b = 2
print("执行了getv2")
return a+b
}
// v1 = 10,v1>0直接返回,没必要执行getv2()
let a = getFirstNum(10, getv2())
// 此时把v2写成函数类型
func getFirstNum1(_ v1:Int,_ v2:()->Int) -> Int{
return v1>0 ? v1:v2()
}
// v1>0,直接返回,不执行getv2
let b = getFirstNum1(10, getv2)
//当v2是个数值时
let c = getFirstNum1(10) { () -> Int in
return 7
}
//或者
let c1 = getFirstNum1(10, {7})
//为了增加可读性,使用自动闭包@autoclosure,自动转成闭包形式
func getFirstNum2(_ v1:Int,_ v2:@autoclosure()->Int) -> Int{
return v1>0 ? v1:v2()
}
// 将7 自动转为了闭包表达式{7}
let d = getFirstNum2(10, 7)
let e = getFirstNum2(10, getv2())