我們先看一個例子
func or(first:Bool,second:()->Bool) -> Bool {
if first {
return true
}
else {
return second()
}
}
我這里定義了一個函數(shù)晚碾,函數(shù)有兩個參數(shù)抓半,第一個是一個Bool值,第二個參數(shù)是()->T這樣一個無參數(shù)的閉包格嘁。我們用此函數(shù)對或運算進行模擬笛求。
來看下調用
正常調用
or(2>3) { () -> Bool in
return 4 > 3
}//等價于(2>3)|| (4>3),返回結果為true
正常情況下我們根據(jù)xcode提示,直接回車的話是這樣調用的糕簿,但是這什么鳥玩意探入,長這么丑,我只不過是求個或運算懂诗,長這么丑蜂嗽,誰看的出來這是或運算。但是我們可以簡化下
簡化版
or(2>3, second: {4>3})
貌似好看了許多殃恒,但是看著還是這么別扭植旧,尤其是我這種OC觀念很深的人辱揭,這什么玩意,小括號套大括號的病附。還是很難看问窃。
這時候我們可以用到我們的@autoclosure了
@autoclosure
在閉包前面加上@autoclosure
func or(first:Bool,@autoclosure second:()->Bool) -> Bool {
if first {
return true
}
else {
return second()
}
}
再來看下調用
or(2>3,second: 4>3)
這看起來既干凈又方便理解,一看就知道2>3與4>3進行或運算完沪。
@autoclosure:Apple為了讓語法看起來更漂亮些域庇,在Swift中為我們提供了這么一個神奇的東西@autoclosure,他可以讓我們的表達式自動封裝成一個閉包丽焊。
截圖
看下在Playground的執(zhí)行情況
or.gif
注意
@autoclosure只適用于這樣的()->T無參閉包较剃。