1.閉包表達式語法
{ (參數(shù)) -> return 類型 in
//內(nèi)容
}
let names = ["C", "A", "E", "B", "D"]
func back(_ s1: String, s2: String) -> Bool {
return s1 > s2 //(B > A, C > B)
}
//閉包后:
var reversedNames.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
?2.根據(jù)上下文推斷類型
reversedNames = names.sorted(by: {s1, s2 in return s1 > s2})
//傳入?yún)?shù)的類型確定,: String, : String可省略。傳出參數(shù)的類型確定: -> Bool可省略
3.單表達式閉包的隱式返回
reversedNames = names.sorted(by: {s1, s2 in s1 > s2})
//只包含一個表達式,省略return之后無歧義,所以可以省略return。
4.參數(shù)名稱縮寫
reversedNames = names.sorted(by: {$0 > $1})
//可按照$0, $1, $2順序調(diào)用閉包函數(shù)
5.運算符方法
reversedNames = names.sorted(by: >)
6.尾隨閉包
將很長的閉包表達式作為最后一個參數(shù)傳遞給函數(shù),不用寫出他的參數(shù)標簽。
func some(do: () -> Void) {
//代碼
}
//不使用尾隨閉包調(diào)用函數(shù)
some(do: {
//代碼
}
//使用尾隨閉包調(diào)用函數(shù)
some() {
//語句
}
reversedNames = names.sorted() {$0 > $1}
//sorted為函數(shù)的唯一方法時,可省略括號
reversedNames = names.sorted {$0 > $1}
7.值捕獲
嵌套函數(shù)可捕獲其外部函數(shù)所有參數(shù)、變量、常量。
8.逃逸閉包
當一個閉包作為一個參數(shù)傳到一個函數(shù)中,但閉包在函數(shù)返回之后才被執(zhí)行,則稱閉包逃逸。
標注@escaping,表示允許閉包逃逸。
var comp: [() -> Void] = []
func some(comp1: @escaping () -> Void) {
comp.append(comp1)
}
9.自動閉包
?包裝傳遞給函數(shù)作為參數(shù)的表達式。不接受參數(shù),只返回值。文章來源:http://www.zghlxwxcb.cn/news/detail-674365.html
?延遲求值。直到調(diào)用這個閉包,代碼才被執(zhí)行。文章來源地址http://www.zghlxwxcb.cn/news/detail-674365.html
var cuL = ["C", "A", "E", "B", "D"]
print(cuL.count) //5
let cuP = {cuL.remove(at: 0)}
print(cuL.count) //5。閉包未運行
cuP() //調(diào)用閉包
print(cuL.count) //4。閉包已運行,第一個值被刪除。
到了這里,關于iOS開發(fā)Swift-閉包的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!