Swift閉包作為函數(shù)或方法參數(shù)簡(jiǎn)寫

首先,我們看看閉包作為函數(shù)的參數(shù)時(shí)簡(jiǎn)寫是什么樣子的:

let arr = [1,2,3]
//下方代碼的作用是,遍歷數(shù)組,打印出每一個(gè)元素
arr.map { print($0) }
//下方代碼的作用是,從大到小排序數(shù)組內(nèi)元素,生成一個(gè)新的數(shù)組new
let new = arr.sorted { $0 > $1 }

可能第一次接觸swift的朋友會(huì)一臉懵逼,這都是什么意思?不急,往下看完。

1.什么是閉包

閉包:就是自包含的代碼塊,可以在代碼中被傳遞和使用。
閉包,實(shí)際上就是OC里面的blocks,在其它語(yǔ)言里面就是匿名函數(shù)。

閉包在swift中有幾種形式,我們的主題是閉包的簡(jiǎn)寫,關(guān)于閉包更多的概念,就不詳細(xì)講解了。

2.完整函數(shù)的寫法

我們用數(shù)組的sorted(by:)排序方法來(lái)舉例。該方法會(huì)返回一個(gè)與原數(shù)組大小相同,內(nèi)部元素不同的數(shù)組,對(duì)原數(shù)組,該方法不會(huì)修改。sorted(by:)方法接收一個(gè)函數(shù)參數(shù),函數(shù)的類型為:(Int, Int) -> Bool。

let arr = [1,2,3,8,6,5,4]
//定義出排序函數(shù)
func sortedMethod(_ s1: Int, _ s2: Int) -> Bool {
    return s1 > s2
}
//排序
let new = arr.sorted(by: sortedMethod) //new的內(nèi)容:8 6 5 4 3 2 1

3.使用閉包的寫法

sorted(by:)方法,可以接收一個(gè)閉包用來(lái)代替函數(shù)作為參數(shù)

//使用閉包。in關(guān)鍵字,表示閉包的參數(shù)和返回值類型定義已經(jīng)完成,閉包函數(shù)體即將開始
let new1 = arr.sorted(by: { (s1: Int, s2: Int) -> Bool in
    return s1 > s2
}) //new的內(nèi)容:8 6 5 4 3 2 1

4.根據(jù)上下文推斷類型

因?yàn)殚]包是作為sorted(by:)方法的參數(shù)傳入的,所以閉包的參數(shù)和返回類型可以被推斷出來(lái)。所以閉包的參數(shù)和返回值聲明可以被省略。如下:

//省略參數(shù)和返回值聲明
let new2 = arr.sorted(by: { s1, s2 in
    return s1 > s2
})

雖然說(shuō)這樣寫很方便,但是會(huì)不利于閱讀,完整的寫完格式,能夠提高代碼的可讀性。

5.單表達(dá)式閉包隱式返回

單行表達(dá)式的閉包可以省略return關(guān)鍵字。
注意:必須是單行表達(dá)式的閉包才能省略return關(guān)鍵字

//單行表達(dá)式省略return關(guān)鍵字
let new3 = arr.sorted(by: { s1, s2 in
    s1 > s2
})
```

##6.參數(shù)名稱縮寫
使用閉包來(lái)作為參數(shù),swift提供了參數(shù)名稱縮寫功能。就是說(shuō),可以使用$0,$1,$2來(lái)依次使用參數(shù),即使該參數(shù)沒(méi)有被顯式的定義。因此,可以省略掉in關(guān)鍵字和前方的參數(shù)。
```swift
//參數(shù)名稱縮寫,$0和$1分別代表s1和s2
let new4 = arr.sorted(by: { $0 > $1 })
```

##7.運(yùn)算符方法
實(shí)際上,由于 > 該符號(hào)實(shí)際上是一個(gè)函數(shù),類型為(Int, Int) -> Bool,所以,可以更加簡(jiǎn)單的寫。
```swift
//運(yùn)算符方法
let new5 = arr.sorted(by: > )
```

##8.尾隨閉包
如果需要一個(gè)很長(zhǎng)的閉包表達(dá)式作為最后一個(gè)參數(shù)傳遞給函數(shù),可以使用尾隨閉包來(lái)增強(qiáng)可讀性。
***注意點(diǎn):1.作為最后一個(gè)參數(shù)傳遞給函數(shù)。2.使用尾隨閉包可以不用寫出其它參數(shù)標(biāo)簽***
```swift
//尾隨閉包
let new6 = arr.sorted() { $0 > $1 }

//如果閉包表達(dá)式是函數(shù)或者方法的唯一參數(shù),可以省略()
let new7 = arr.sorted { $0 > $1 }
```
至此,閉包作為函數(shù)或方法參數(shù)的簡(jiǎn)寫就寫完了。大家應(yīng)該也能看懂和使用了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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