使用@autoclosure
可以使得该参数结果延迟获取,在获取复杂数据结果作为参数时有优化的作用
- 使用
@autoclosure
func findGreatThan100_autoclosure(parm1: Int,parm2: @autoclosure () -> Int) -> Int {
print("findGreatThan100_autoclosure_fun_invoking")
if parm1 > 100 {
return parm1
}
return parm2()
}
func method() -> Int{
print("method_fun_invoking")
return 101
}
let result = findGreatThan100_autoclosure(parm1: 10, parm2: method())
结果
print("findGreatThan100_autoclosure_fun_invoking")
print("method_fun_invoking")
- 不使用
@autoclosure
func findGreatThan100_noautoclosure(parm1: Int,parm2: Int) -> Int {
print("findGreatThan100_noautoclosure")
if parm1 > 100 {
return parm1
}
return parm2
}
func method() -> Int{
print("method_fun_invoking")
return 101
}
let result1 = findGreatThan100_noautoclosure(parm1: 10, parm2: method())
结果
print("method_fun_invoking")
print("findGreatThan100_noautoclosure")
在Swift中,|| 或运算符就是使用了这个关键字,使得只要有一个参数符合要求,后面参数不再进行计算,源码如下
extension Bool {
public static func || (lhs: Bool, rhs: @autoclosure () throws -> Bool) rethrows
-> Bool {
return lhs ? true : try rhs()
}
}
网友评论