99久久精品国产片-99久久精品国产免费-99久久精品国产麻豆-99久久精品国产国产毛片-99久久精品国产高清一区二区-99久久精品费精品国产一区二区

Swift 閉包簡單使用

2020-3-30    seo達人

在Swift開發(fā)文檔中是這樣介紹閉包的:閉包是可以在你的代碼中被傳遞和引用的功能性獨立模塊。

Swift閉包

閉包的形式

Swift中的閉包有很多優(yōu)化的地方

創(chuàng)建基本的閉包

在閉包中接收參數(shù)

從閉包中返回值

閉包作為參數(shù)

尾隨閉包語法

值捕獲

逃逸閉包

閉包的形式

全局函數(shù) 嵌套函數(shù) 閉包表達式

有名字但不能捕獲任何值。 有名字,也能捕獲封閉函數(shù)內(nèi)的值。 無名閉包,使用輕量級語法,可以根據(jù)上下文環(huán)境捕獲值。

Swift中的閉包有很多優(yōu)化的地方

根據(jù)上下文推斷參數(shù)和返回值類型



從單行表達式閉包中隱式返回(也就是閉包體只有一行代碼,可以省略return)



可以使用簡化參數(shù)名,如$0, $1(從0開始,表示第i個參數(shù)…)



提供了尾隨閉包語法(Trailing closure syntax)



閉包是引用類型:無論你將函數(shù)或閉包賦值給一個常量還是變量,你實際上都是將常量或變量的值設(shè)置為對應函數(shù)或閉包的引用



創(chuàng)建基本的閉包

let bibao = {

  print("我要創(chuàng)建閉包")

}



上面的代碼實際上創(chuàng)建了一個匿名的函數(shù),并將這個函數(shù)賦給了 driving。之后你就可以把 driving() 當作一個常規(guī)的函數(shù)來用,就像這樣:



bibao()



在閉包中接收參數(shù)

當你創(chuàng)建閉包的時候,它們并沒有名字,也沒有提供書寫參數(shù)的地方。但這并不意味著它們不能接收參數(shù),只不過它們接收參數(shù)的方式稍有不同:這些參數(shù)是被寫在 花括號里面的。



為了讓一個閉包接收參數(shù),你需要在花括號之后把這些參數(shù)列出來,然后跟上一個 in 關(guān)鍵字。這樣就告訴Swift,閉包的主體是從哪里開始的。



舉個例子,我們來創(chuàng)建一個閉包,接收一個叫 place 的字符串作為唯一的參數(shù),就像這樣:



let bibao= { (bao1: String) in

  print("我要創(chuàng)建 (bao1)。")

}



函數(shù)和閉包的一個區(qū)別是運行閉包的時候你不會用到參數(shù)標簽。因此,調(diào)用 driving() 的時候,我們是這樣寫的:



bibao("閉包")



從閉包中返回值

閉包也能返回值,寫法和閉包的參數(shù)類似:寫在閉包內(nèi)部, in 關(guān)鍵字前面。



還是以 driving() 閉包為例, 讓它返回一個字符串。原來的函數(shù)是這樣的:



let bibao= { (bao1: String) in

  print("我要創(chuàng)建  (bao1)。")

}



改成返回字符串而不是直接打印那個字符串,需要 in 之前添加 -> String,然后像常規(guī)函數(shù)那樣用到 return 關(guān)鍵字:



let drivingWithReturn = { (bao1: String) -> String in

  return "我要創(chuàng)建 (bao1)。"

}



現(xiàn)在我們運行這個閉包并且打印出它的返回值:



let message = drivingWithReturn("閉包")

print(message)



閉包作為參數(shù)

既然閉包可以像字符串和整數(shù)一樣使用,你就可以將它們傳入函數(shù)。閉包作為參數(shù)的語法乍一看一看挺傷腦筋的,讓我們慢慢來。



首先,還是基本的 driving() 閉包。



let driving = {

  print("我正在創(chuàng)建")

}



如果我們打算把這個閉包傳入一個函數(shù),以便函數(shù)內(nèi)部可以運行這個閉包。我們需要把函數(shù)的參數(shù)類型指定為 () -> Void。 它的意思是“不接收參數(shù),并且返回 Void”。在Swift中,Void是什么也沒有的意思。



好了,讓我們來寫一個 travel() 函數(shù),接收不同類型的 traveling 動作, 并且在動作前后分別打印信息:



func travel(action: () -> Void) {

  print("我準備創(chuàng)建")

  action()

  print("我建好了")

}



現(xiàn)在可以用上 driving 閉包了,就像這樣:



travel(action: driving)

1

尾隨閉包語法

如果一個函數(shù)的最后一個參數(shù)是閉包,Swift允許你采用一種被稱為 “拖尾閉包語法” 的方式來調(diào)用這個閉包。你可以把閉包傳入函數(shù)之后的花括號里,而不必像傳入?yún)?shù)那樣。



又用到我們的 travel() 函數(shù)了。它接收一個 action 閉包。閉包在兩個 print() 調(diào)用之間執(zhí)行:



func travel(action: () -> Void) {

  print("我準備創(chuàng)建")

  action()

  print("我建好了")

}



由于函數(shù)的最后一個參數(shù)是閉包,我們可以用拖尾閉包語法來調(diào)用 travel() 函數(shù),就像這樣:



travel() {

  print("我要創(chuàng)建閉包")

}



實際上,由于函數(shù)沒有別的參數(shù)了,我們還可以將圓括號完全移除:



travel {

  print("我要創(chuàng)建閉包")

}



拖尾閉包語法在Swift中非常常見,所以要加深印象。



值捕獲

閉包可以在其被定義的上下文中捕獲常量或變量。即使定義這些常量和變量的原作用域已經(jīng)不存在,閉包仍然可以在閉包函數(shù)體內(nèi)引用和修改這些值。

Swift 中,可以捕獲值的閉包的最簡單形式是嵌套函數(shù),也就是定義在其他函數(shù)的函數(shù)體內(nèi)的函數(shù)。嵌套函數(shù)可以捕獲其外部函數(shù)所有的參數(shù)以及定義的常量和變量。

官方文檔例子:



 func makeIncrementer(forIncrement amount: Int) -> () -> Int {

     var runningTotal = 0

     func incrementer() -> Int {

         runningTotal += amount

        return runningTotal

     }

     return incrementer

 }

 //運行結(jié)果:

 let one = makeIncrementer(forIncrement: 10)

print(one())  //10

print(one())  //20



let two = makeIncrementer(forIncrement: 10)

print(two())  //10

print(two())  //20



逃逸閉包

當一個閉包作為參數(shù)傳到一個函數(shù)中,但是這個閉包在函數(shù)返回之后才被執(zhí)行,我們稱該閉包從函數(shù)中逃逸。當你定義接受閉包作為參數(shù)的函數(shù)時,你可以在參數(shù)名之前標注 @escaping,用來指明這個閉包是允許“逃逸”出這個函數(shù)的。(默認值:@noescaping)

官方文檔例子:



var completionHandlers: [() -> Void] = []

func someFunctionWithEscapingClosure(completionHandler: @escaping () -> Void) {

    completionHandlers.append(completionHandler)

}



如上面例子,加入標注@escaping即可表明這個閉包是允許逃逸的



以上就是我對Swift閉包的淺薄認知,如果有細節(jié)錯誤請指出,也可以查閱官方文檔,鏈接在下面教程更為詳細。

就是這樣啦,愛你們么么么~~


日歷

鏈接

個人資料

藍藍設(shè)計的小編 http://www.lapeinture.cn

存檔

999精品在线| 欧美电影免费| 91麻豆精品国产自产在线观看一区 | 免费一级片网站| 在线观看成人网| 九九国产| 九九国产| 日韩在线观看视频黄| 四虎影视库国产精品一区| 欧美一级视频免费| 国产成a人片在线观看视频| 一本伊大人香蕉高清在线观看| 九九久久99| 久久99这里只有精品国产| 成人免费观看视频| 日韩男人天堂| 日韩综合| 国产网站免费视频| 国产美女在线观看| 亚洲第一视频在线播放| 日本在线不卡免费视频一区| 国产视频网站在线观看| 精品久久久久久综合网| 国产不卡在线观看| 久久精品店| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久国产一久久高清| 天天色色网| 国产精品1024永久免费视频 | 国产综合成人观看在线| 国产麻豆精品免费密入口| 国产一区二区精品在线观看| 九九干| 日日夜夜婷婷| 国产一区二区高清视频| 一级女性大黄生活片免费| 99色视频在线| 亚洲 男人 天堂| 999久久久免费精品国产牛牛| 欧美激情一区二区三区中文字幕| 午夜激情视频在线观看| 成人高清免费| 久久99青青久久99久久| 日韩在线观看网站| 国产美女在线一区二区三区| 美女免费毛片| 国产一区二区高清视频| 成人在免费观看视频国产| 日日日夜夜操| 久草免费资源| 在线观看导航| 99久久精品费精品国产一区二区| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产一区二区精品| 欧美电影免费| 日韩在线观看免费| 天天做日日干| 欧美激情一区二区三区视频 | 亚洲精品影院久久久久久| 亚洲天堂免费| 午夜家庭影院| 日日爽天天| 精品视频免费在线| 欧美日本国产| 天堂网中文在线| 99热热久久| 日本特黄特色aaa大片免费| a级毛片免费全部播放| 国产一区二区精品| 高清一级淫片a级中文字幕 | 99久久精品国产免费| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 欧美国产日韩在线| 欧美大片aaaa一级毛片| 欧美a级成人淫片免费看| 黄色免费三级| 韩国毛片免费大片| 国产麻豆精品免费密入口| 成人免费观看男女羞羞视频| 九九久久国产精品大片| 成人免费福利片在线观看| 日日日夜夜操| 欧美国产日韩在线| 九九免费高清在线观看视频| 日韩在线观看视频黄| 精品视频免费看| 日本伦理片网站| 日韩免费片| 国产激情一区二区三区| 精品国产香蕉在线播出| 日韩在线观看视频免费| 麻豆网站在线免费观看| 99热视热频这里只有精品| 久久99这里只有精品国产| 日韩男人天堂| 欧美另类videosbestsex视频| 亚洲天堂在线播放| 国产原创中文字幕| 四虎久久精品国产| 欧美大片一区| 日本特黄特色aaa大片免费| 在线观看成人网| 日韩欧美一二三区| 国产麻豆精品| 精品久久久久久综合网| 精品国产一区二区三区久久久蜜臀| 成人免费一级纶理片| 精品毛片视频| 国产一区免费在线观看| 国产视频网站在线观看| 国产视频网站在线观看| 欧美a免费| 999精品在线| 精品国产一区二区三区精东影业| 免费国产在线观看| 国产一区二区高清视频| 久久成人性色生活片| 日韩中文字幕一区二区不卡| 欧美a免费| 青草国产在线| 九九精品久久久久久久久| 精品国产香蕉在线播出 | 亚洲 激情| 色综合久久天天综合绕观看| 麻豆网站在线看| 美女免费精品视频在线观看| 日韩欧美一二三区| 麻豆系列 在线视频| 九九九国产| 色综合久久天天综合| 久久精品店| 欧美激情一区二区三区中文字幕| 日本伦理黄色大片在线观看网站| 欧美a级v片不卡在线观看| 天天色色网| 四虎影视库国产精品一区| 午夜欧美成人香蕉剧场| 亚洲精品中文一区不卡 | 夜夜操网| 日韩av成人| 欧美国产日韩在线| 成人高清视频在线观看| 久久国产精品只做精品| 一级毛片视频播放| 午夜在线影院| 午夜欧美成人香蕉剧场| 麻豆网站在线看| 亚洲不卡一区二区三区在线| 免费的黄色小视频| 九九热精品免费观看| 成人免费一级毛片在线播放视频| 中文字幕一区二区三区 精品| 高清一级片| 青青青草视频在线观看| 久久久久久久久综合影视网| 国产91精品一区| 午夜激情视频在线观看| 成人免费网站久久久| 香蕉视频久久| 成人a大片高清在线观看| 二级片在线观看| 九九久久99| 国产视频在线免费观看| 黄视频网站在线免费观看| 欧美a免费| 国产一区二区高清视频| 欧美激情一区二区三区中文字幕| 国产成人女人在线视频观看| 国产不卡精品一区二区三区| 国产麻豆精品免费视频| 国产网站免费在线观看| 成人免费观看的视频黄页| 欧美日本免费| 99热精品在线| 国产视频一区在线| 日韩欧美一及在线播放| 欧美18性精品| 一级女性大黄生活片免费| 国产一区二区精品在线观看| 欧美国产日韩在线| 国产网站麻豆精品视频| 91麻豆国产福利精品| 国产不卡精品一区二区三区| 黄色短视屏| 成人在激情在线视频| 日韩中文字幕一区二区不卡| 免费国产在线观看| 精品国产香蕉在线播出 | 亚洲天堂免费| 你懂的福利视频| 国产91素人搭讪系列天堂| 精品视频免费看| 久久国产精品永久免费网站| 日韩综合| 久久国产精品只做精品| 夜夜操网| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 青青青草视频在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产亚洲精品成人a在线|