swift中閉包的簡單使用


func compare(l1: Int, l2: Int) -> Bool {
    return l1 > l2
}

let numbers = [2, 3, 6, 8, 1]
let sortedNumbers = numbers.sorted(by: { (l1: Int, l2: Int) -> Bool in return l1 > l2})
print(sortedNumbers)

let sortedNumbers1 = numbers.sorted(by: { (l1, l2) in l1 > l2})
print(sortedNumbers1)

let sortedNumbers2 = numbers.sorted(by: { $0 > $1})
print(sortedNumbers2)

let sortedNumbers3 = numbers.sorted(by: >)
print(sortedNumbers3)

// 尾閉包函數(shù)
// 當函數(shù)中的參數(shù)中使用了閉包,而且閉包內(nèi)部很復雜,且閉包是最后一個參數(shù)時,才能使用尾閉包
let sortedNumbers4 = numbers.sorted() { // 同樣是上邊的例子,我們可以使用尾閉包,好處是增加代碼的閱讀性
    $0 < $1
}
print(sortedNumbers4)

解釋說明

Swift 自動對行內(nèi)閉包提供簡寫實際參數(shù)名,你也可以通過 $0 , $1 , $2 等名字來引用閉包的實際參數(shù)值。

如果你在閉包表達式中使用這些簡寫實際參數(shù)名,那么你可以在閉包的實際參數(shù)列表中忽略對其的定義,并且簡寫實際參數(shù)名的數(shù)字和類型將會從期望的函數(shù)類型中推斷出來。 in  關鍵字也能被省略,因為閉包表達式完全由它的函數(shù)體組成:


let numbers = [3,2,4,1,5,7,6];
 
var sortedNumbers = numbers.sorted(by:{$0 < $1});
print(sortedNumbers);//輸出為:[1, 2, 3, 4, 5, 6, 7]
 
sortedNumbers = numbers.sorted(by:{$1 < $0});
print(sortedNumbers);//輸出為:[7, 6, 5, 4, 3, 2, 1]
 可以看出,可以用$0、$1、$2來表示調(diào)用閉包中參數(shù),$0指代第一個參數(shù),$1指代第二個參數(shù),$2指代第三個參數(shù),以此類推$n+1指代第n個參數(shù),$后的數(shù)字代表參數(shù)的位置,一一對應。
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容