使用@autoclosure
可以使得該參數(shù)結(jié)果延遲獲取,在獲取復雜數(shù)據(jù)結(jié)果作為參數(shù)時有優(yōu)化的作用
- 使用
@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())
結(jié)果
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())
結(jié)果
print("method_fun_invoking")
print("findGreatThan100_noautoclosure")
在Swift中,|| 或運算符就是使用了這個關鍵字,使得只要有一個參數(shù)符合要求,后面參數(shù)不再進行計算,源碼如下
extension Bool {
public static func || (lhs: Bool, rhs: @autoclosure () throws -> Bool) rethrows
-> Bool {
return lhs ? true : try rhs()
}
}