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

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

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航闺,在其它語言里面就是匿名函數(shù)。

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

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

我們用數(shù)組的sorted(by:)排序方法來舉例乖杠。該方法會(huì)返回一個(gè)與原數(shù)組大小相同,內(nèi)部元素不同的數(shù)組澄成,對原數(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è)閉包用來代替函數(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ù)和返回類型可以被推斷出來。所以閉包的參數(shù)和返回值聲明可以被省略矩乐。如下:

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

雖然說這樣寫很方便,但是會(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ù)名稱縮寫
使用閉包來作為參數(shù)掺喻,swift提供了參數(shù)名稱縮寫功能。就是說储矩,可以使用$0,$1,$2來依次使用參數(shù)感耙,即使該參數(shù)沒有被顯式的定義。因此持隧,可以省略掉in關(guān)鍵字和前方的參數(shù)即硼。
```swift
//參數(shù)名稱縮寫,$0和$1分別代表s1和s2
let new4 = arr.sorted(by: { $0 > $1 })
```

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

##8.尾隨閉包
如果需要一個(gè)很長的閉包表達(dá)式作為最后一個(gè)參數(shù)傳遞給函數(shù)裂允,可以使用尾隨閉包來增強(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ù)的簡寫就寫完了貌踏。大家應(yīng)該也能看懂和使用了十饥。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祖乳,隨后出現(xiàn)的幾起案子逗堵,更是在濱河造成了極大的恐慌,老刑警劉巖眷昆,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砸捏,死亡現(xiàn)場離奇詭異谬运,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)垦藏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門梆暖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人掂骏,你說我怎么就攤上這事轰驳。” “怎么了弟灼?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵级解,是天一觀的道長。 經(jīng)常有香客問我田绑,道長勤哗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任掩驱,我火速辦了婚禮芒划,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘欧穴。我一直安慰自己民逼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布涮帘。 她就那樣靜靜地躺著拼苍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪调缨。 梳的紋絲不亂的頭發(fā)上疮鲫,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音弦叶,去河邊找鬼棚点。 笑死,一個(gè)胖子當(dāng)著我的面吹牛湾蔓,可吹牛的內(nèi)容都是我干的瘫析。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼默责,長吁一口氣:“原來是場噩夢啊……” “哼贬循!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桃序,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤杖虾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后媒熊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奇适,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坟比,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嚷往。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葛账。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖皮仁,靈堂內(nèi)的尸體忽然破棺而出籍琳,到底是詐尸還是另有隱情,我是刑警寧澤贷祈,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布趋急,位于F島的核電站,受9級特大地震影響势誊,放射性物質(zhì)發(fā)生泄漏呜达。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一粟耻、第九天 我趴在偏房一處隱蔽的房頂上張望查近。 院中可真熱鬧,春花似錦勋颖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叁执,卻和暖如春茄厘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谈宛。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工次哈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吆录。 一個(gè)月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓窑滞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親恢筝。 傳聞我的和親對象是個(gè)殘疾皇子哀卫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容