@autoclosure 做的事情就是把一句表達式自動地封裝成一個閉包 (closure)。這樣我們用的時候,就可以像傳參數一樣傳遞一個表達式。
在沒有使用@autoclosure
的時候我們這樣寫
func compareNumbers(_ predicate: () -> Bool) {
if predicate() {
print("true")
}
}
compareNumbers {
1 < 2
}
在這種表達式比較簡單的時候我更喜歡用@autoclosure
func compareNumbersAutoClosure( _ predicate: @autoclosure () -> Bool) {
if predicate() {
print("true")
}
}
compareNumbersAutoClosure(1 < 2)
注意:
@autoclosure 并不支持帶有輸入參數的寫法,也就是說只有形如 () -> T 的參數才能使用這個特性進行簡化。