最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift 3.0基礎(chǔ)學(xué)習(xí)之閉包

 更新時(shí)間:2017年03月13日 08:55:51   作者:Mellong  
Swift引進(jìn)了閉包的概念,這個(gè)與object-c的block類似,使用過(guò)block的話都知道有多方便,所以開始學(xué)Swift,先要把閉包學(xué)會(huì),后面使用會(huì)很頻繁。下面這篇文章主要介紹了Swift 3.0基礎(chǔ)學(xué)習(xí)之閉包的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

前言

閉包是功能性自包含模塊,可以在代碼中被傳遞和使用。 Swift 中的閉包與 C 和 Objective-C中的 blocks 以及其他一些編程語(yǔ)言中的 lambdas 比較相似。下面這篇文章就來(lái)詳細(xì)介紹了關(guān)于Swift 3.0中的閉包,感興趣的一起來(lái)看看吧。

開始

閉包的書寫格式如下:

{ (parameters) -> return type in
statements
}

reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in return s1 > s2 } )

使用的時(shí)候可以簡(jiǎn)化為

reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )

也可以簡(jiǎn)化為

reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )

甚至可以簡(jiǎn)化為

reversedNames = names.sorted(by: { $0 > $1 } )

$0為第一個(gè)參數(shù),以此類推

返回布爾值的話可以直接給一個(gè)判斷符號(hào),如

reversedNames = names.sorted(by: >)

尾部閉包

reversedNames = names.sorted() { $0 > $1 }

或者(無(wú)其他參數(shù)的情況下)

reversedNames = names.sorted { $0 > $1 }

這兩個(gè)方式均可

捕捉值

如下代碼,閉包可以獲取和修改其周圍的變量

func makeIncrementer(forIncrement amount: Int) -> () -> Int {
 var runningTotal = 0
 func incrementer() -> Int {
 runningTotal += amount
 return runningTotal
 }
 return incrementer
}

以上函數(shù)返回一個(gè)閉包,閉包里添加了讀取和修改閉包的外部變量runningTotal

let incrementByTen = makeIncrementer(forIncrement: 10)
incrementByTen()
// returns a value of 10
incrementByTen()
// returns a value of 20
incrementByTen()
// returns a value of 30

閉包引用類型

可以通過(guò)用這種方式引用閉包并且調(diào)用:

let alsoIncrementByTen = incrementByTen
alsoIncrementByTen()

@escaping

傳遞給函數(shù)的閉包如果不是在函數(shù)內(nèi)調(diào)用,而是在函數(shù)內(nèi)用外部變量保存當(dāng)前的閉包,在合適的時(shí)間再進(jìn)行調(diào)用,這是就需要在閉包參數(shù)前加入@escaping關(guān)鍵字,不然編譯器會(huì)報(bào)錯(cuò)。

比較好理解的就是經(jīng)常用到的網(wǎng)絡(luò)請(qǐng)求,請(qǐng)求完成才執(zhí)行完成的閉包。

官方的例子如下:

//需要加@escaping的情況
var completionHandlers: [() -> Void] = []
func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {
 completionHandlers.append(completionHandler)
}
//直接在函數(shù)內(nèi)調(diào)用傳入的閉包則不需要@escaping
func someFunctionWithNonescapingClosure(closure: () -> Void) {
 closure()
}

@autoclosure 自動(dòng)閉包

// customersInLine is ["Alex", "Ewa", "Barry", "Daniella"]
func serve(customer customerProvider: () -> String) {
 print("Now serving \(customerProvider())!")
}
serve(customer: { customersInLine.remove(at: 0) } )
// Prints "Now serving Alex!"

如上代碼所示,我們加入一個(gè)返回類型為String的閉包,需要在外面加上{},為了書寫方便, 加上@autoclosure關(guān)鍵字,那么這個(gè)對(duì){}就可以省略了。

// customersInLine is ["Ewa", "Barry", "Daniella"]
func serve(customer customerProvider: @autoclosure () -> String) {
 print("Now serving \(customerProvider())!")
}
serve(customer: customersInLine.remove(at: 0))
// Prints "Now serving Ewa!"

編譯器會(huì)幫我們標(biāo)記這行代碼為閉包,這段代碼不會(huì)馬上被調(diào)用,而是當(dāng)成閉包在函數(shù)里調(diào)用的時(shí)候才被調(diào)用。

參考英語(yǔ)原文:
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID94

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者使用Swift能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Swift實(shí)現(xiàn)無(wú)限輪播效果

    Swift實(shí)現(xiàn)無(wú)限輪播效果

    這篇文章主要為大家詳細(xì)介紹了Swift無(wú)限輪播效果實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Swift如何在應(yīng)用中添加圖標(biāo)更換功能的方法

    Swift如何在應(yīng)用中添加圖標(biāo)更換功能的方法

    本篇文章主要介紹了Swift如何在應(yīng)用中添加圖標(biāo)更換功能的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Swift教程之函數(shù)詳解

    Swift教程之函數(shù)詳解

    這篇文章主要介紹了Swift教程之函數(shù)詳解,本文講解了函數(shù)的聲明與調(diào)用、函數(shù)的參數(shù)和返回值、函數(shù)參數(shù)名、函數(shù)類型等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • NotificationCenter類實(shí)現(xiàn)原理

    NotificationCenter類實(shí)現(xiàn)原理

    這篇文章主要為大家介紹了NotificationCenter類實(shí)現(xiàn)原理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Swift中的Access Control權(quán)限控制介紹

    Swift中的Access Control權(quán)限控制介紹

    這篇文章主要介紹了Swift中的Access Control權(quán)限控制介紹,本文講解了private、internal、public三個(gè)關(guān)鍵字的使用,需要的朋友可以參考下
    2015-05-05
  • swift中利用runtime交換方法的實(shí)現(xiàn)示例

    swift中利用runtime交換方法的實(shí)現(xiàn)示例

    這篇文章主要給大家介紹了關(guān)于swift中利用runtime交換方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-05-05
  • Swift心得筆記之字符串

    Swift心得筆記之字符串

    Swift 的 String 類型是值類型 。 如果您創(chuàng)建了一個(gè)新的字符串,那么當(dāng)其進(jìn)行常量、變量賦值操作或在函數(shù)/方法中傳遞時(shí),會(huì)進(jìn)行值拷貝。 任何情況下,都會(huì)對(duì)已有字符串值創(chuàng)建新副本,并對(duì)該新副本進(jìn)行傳遞或賦值操作。
    2015-04-04
  • Swift面試題及答案整理

    Swift面試題及答案整理

    雖然Swift出現(xiàn)的時(shí)間不久,但是它已經(jīng)成為最流行的編程語(yǔ)言之一了。Swift的知識(shí)浩如煙海,但是怎么測(cè)試你掌握了多少?通過(guò)下面這篇整理關(guān)于Swift面試題及答案,可能會(huì)對(duì)你所掌握的Swift進(jìn)行一個(gè)判斷,需要的朋友可以參考借鑒。
    2017-01-01
  • Swift實(shí)現(xiàn)表格視圖單元格單選(2)

    Swift實(shí)現(xiàn)表格視圖單元格單選(2)

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)表格視圖單元格單選的第二篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 通過(guò)Notification.Name看Swift是如何優(yōu)雅的解決String硬編碼

    通過(guò)Notification.Name看Swift是如何優(yōu)雅的解決String硬編碼

    這篇文章主要給大家介紹了通過(guò)Notification.Name看Swift是如何優(yōu)雅的解決String硬編碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08

最新評(píng)論

南溪县| 上栗县| 泗阳县| 香河县| 遂昌县| 峨眉山市| 曲阳县| 交城县| 新野县| 盐源县| 乌恰县| 呼图壁县| 黑河市| 突泉县| 枣庄市| 新蔡县| 高平市| 阿克| 徐闻县| 峡江县| 华亭县| 华宁县| 丹江口市| 温州市| 临潭县| 措美县| 青龙| 吉水县| 仙居县| 屏山县| 蓬溪县| 霍州市| 基隆市| 乌兰浩特市| 宣武区| 桐庐县| 鄂伦春自治旗| 鞍山市| 兴仁县| 花莲市| 浪卡子县|