亚洲av午夜福利精品一区人妖,亚洲乱码日产精品a级毛片久久,91精品视频观看,青草青草久热精品视频在线观看

Swift 閉包簡單使用

2020-3-30    seo達(dá)人

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

Swift閉包

閉包的形式

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

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

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

從閉包中返回值

閉包作為參數(shù)

尾隨閉包語法

值捕獲

逃逸閉包

閉包的形式

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

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

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

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



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



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



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



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



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

let bibao = {

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

}



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



bibao()



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

當(dāng)你創(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ū)別是運(yùn)行閉包的時候你不會用到參數(shù)標(biāo)簽。因此,調(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)在我們運(yùn)行這個閉包并且打印出它的返回值:



let message = drivingWithReturn("閉包")

print(message)



閉包作為參數(shù)

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



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



let driving = {

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

}



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



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



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

  print("我準(zhǔn)備創(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("我準(zhǔn)備創(chuàng)建")

  action()

  print("我建好了")

}



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



travel() {

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

}



實(shí)際上,由于函數(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

 }

 //運(yùn)行結(jié)果:

 let one = makeIncrementer(forIncrement: 10)

print(one())  //10

print(one())  //20



let two = makeIncrementer(forIncrement: 10)

print(two())  //10

print(two())  //20



逃逸閉包

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

官方文檔例子:



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

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

    completionHandlers.append(completionHandler)

}



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



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

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


日歷

鏈接

個人資料

存檔

亚洲av午夜福利精品一区人妖,亚洲乱码日产精品a级毛片久久,91精品视频观看,青草青草久热精品视频在线观看
<strike id="cy2gs"><menu id="cy2gs"></menu></strike>
  • <del id="cy2gs"><dfn id="cy2gs"></dfn></del>
  • 美腿丝袜亚洲色图| 黑人操亚洲美女惩罚| 欧美一区二区三区四区夜夜大片| 亚洲精品综合久久中文字幕| 在线精品国精品国产尤物884a| 国产亚洲一区二区精品| 国产视频在线观看一区| 国产女优一区| 国产午夜亚洲精品不卡| 国产亚洲精品高潮| 国产亚洲亚洲| 狠狠色狠狠色综合日日91app| 国产日韩欧美视频| 狠狠v欧美v日韩v亚洲ⅴ| 在线电影一区| 亚洲破处大片| 妖精视频成人观看www| 夜夜嗨一区二区三区| 一区二区三区高清在线| 亚洲在线第一页| 欧美一级播放| 久热这里只精品99re8久| 免费成人毛片| 欧美日韩成人免费| 国产精品乱人伦一区二区| 国产欧美日韩视频一区二区三区 | 欧美成人午夜影院| 欧美激情一区二区三区不卡| 欧美日本中文字幕| 国产精品一区二区你懂得 | 国产精品www.| 国产精品人人爽人人做我的可爱| 国产精品高潮呻吟| 国产日韩一区| 最新成人av在线| 亚洲天天影视| 久久丁香综合五月国产三级网站| 久久一区二区三区超碰国产精品| 欧美成人精品不卡视频在线观看| 欧美日韩日日夜夜| 国产视频亚洲| 亚洲精品一区在线| 一区二区三区四区国产精品| 欧美一区二区| 欧美成人精品h版在线观看| 欧美日韩和欧美的一区二区| 国产伦精品一区二区三区| 精品成人一区二区| 在线一区二区日韩| 久久精品国产综合精品| 欧美激情无毛| 国产酒店精品激情| 亚洲国产精品久久久久久女王| 亚洲少妇在线| 久久综合久久综合久久综合| 欧美日韩中文在线| 激情综合色综合久久| 99国产精品久久久久久久成人热| 羞羞视频在线观看欧美| 欧美成人一二三| 国产免费亚洲高清| 亚洲精品一区二区在线观看| 欧美一二区视频| 欧美—级在线免费片| 国产欧美一区二区三区久久| 亚洲日本无吗高清不卡| 欧美在线观看视频| 欧美日韩国产精品一卡| 国内精品国产成人| 亚洲天堂成人| 欧美成人午夜激情视频| 国产日韩欧美精品一区| 99伊人成综合| 美女黄毛**国产精品啪啪 | 国产色爱av资源综合区| 亚洲精品一区二区三区福利| 久久国产手机看片| 国产精品vvv| 亚洲精品久久久久久一区二区| 欧美有码视频| 国产精品乱子乱xxxx| 亚洲精品国产品国语在线app| 久久福利资源站| 国产精品va在线播放| 亚洲黑丝在线| 久久久久se| 国产欧美日韩一区二区三区在线观看 | 国产精品成人一区二区网站软件 | 国产夜色精品一区二区av| 亚洲美洲欧洲综合国产一区| 久久综合给合久久狠狠狠97色69| 国产欧美精品一区二区三区介绍| 夜夜爽www精品| 欧美成人午夜免费视在线看片| 激情欧美日韩| 久久xxxx精品视频| 国产乱码精品一区二区三| 国产精品99久久99久久久二8| 欧美成人综合在线| 1024日韩| 另类成人小视频在线| 国产最新精品精品你懂的| 小黄鸭视频精品导航| 国产精品美女黄网| 亚洲性xxxx| 国产精品福利在线| 一区二区欧美亚洲| 欧美精品一区二区蜜臀亚洲| 亚洲精品美女久久久久| 欧美成人免费小视频| 亚洲成色www8888| 久热re这里精品视频在线6| 红桃视频一区| 久久视频精品在线| 激情视频一区二区三区| 久久亚洲风情| 亚洲成人在线视频网站| 免费一区二区三区| 91久久精品网| 欧美精品久久99久久在免费线| 91久久综合| 欧美精品一二三| 99精品黄色片免费大全| 欧美日韩伦理在线免费| 在线亚洲欧美视频| 欧美视频一二三区| 亚洲一二三级电影| 国产精品一区毛片| 欧美主播一区二区三区美女 久久精品人| 国产精品有限公司| 久久狠狠久久综合桃花| 激情久久婷婷| 欧美成人自拍| 99精品视频免费全部在线| 欧美视频第二页| 午夜精品国产精品大乳美女| 国产午夜精品一区二区三区视频| 久久久亚洲精品一区二区三区 | 久久婷婷丁香| 亚洲国产精品尤物yw在线观看| 欧美寡妇偷汉性猛交| 亚洲美女在线观看| 欧美偷拍一区二区| 午夜一区二区三区不卡视频| 国产一区二区久久| 免费一级欧美片在线观看| 亚洲精品久久久久久久久| 欧美肉体xxxx裸体137大胆| 亚洲综合二区| 狠狠色狠狠色综合日日小说| 美女日韩在线中文字幕| 日韩亚洲精品视频| 国产精品一卡| 久久五月激情| 一本色道久久综合狠狠躁篇怎么玩| 国产精品videosex极品| 欧美在线观看你懂的| 在线免费观看欧美| 欧美日韩国产综合视频在线| 亚洲欧美日韩系列| 在线免费日韩片| 欧美视频一区| 久久激情视频久久| 亚洲精品国产无天堂网2021| 国产精品久久久久av免费| 久久久xxx| 99视频精品| 国产一区二区剧情av在线| 欧美激情一区二区三区成人| 亚洲一区二区三区影院| 好吊色欧美一区二区三区视频| 欧美极品影院| 欧美亚洲视频| 亚洲美女在线观看| 国产综合久久久久影院| 欧美日韩成人精品| 久久精品国产清自在天天线| 亚洲狼人精品一区二区三区| 国产精品永久| 欧美激情中文字幕乱码免费| 亚洲欧美一区二区在线观看| 亚洲第一视频网站| 国产精品视频午夜| 欧美国产视频日韩| 欧美在线精品一区| 99这里只有久久精品视频| 国自产拍偷拍福利精品免费一| 欧美日韩国产成人| 久久久久欧美精品| 亚洲性xxxx| 91久久久久久国产精品| 国产亚洲精品久久飘花| 欧美日韩视频一区二区| 久久综合999| 午夜在线播放视频欧美| 99国产精品久久久久老师| 伊人色综合久久天天五月婷| 国产精品久久久久久久久久免费| 欧美www视频| 久久久久久久综合|