Closure in Swift

Block很像,表示代碼的集合指黎,簡稱代碼塊朋凉。

可以被傳遞,不會(huì)馬上被執(zhí)行醋安,當(dāng)然后期可以被執(zhí)行多次杂彭。

NSURLSessioncompletionHandler就是一個(gè)closure對象,這個(gè)對象會(huì)在NSURLSession收到了服務(wù)器的返回?cái)?shù)據(jù)或者錯(cuò)誤信息之后被執(zhí)行吓揪。

一般closure有下面兩種:

{ parameters in
  //Code
}

或者沒有參數(shù)的版本:

{
  //Code
}

第一種中亲怠,in關(guān)鍵字分割了參數(shù),就像函數(shù)和方法那樣柠辞,closure可以接收參數(shù)团秽,在in關(guān)鍵字之前,而且不需要指明參數(shù)類型叭首,如果想要指明參數(shù)類型也可以:

下面是指明了closure的參數(shù)類型的聲明方法:

let dataTask = session.dataTaskWithURL(url, completionHandler: {
  (data: NSData?, response: NSURLResponse?, error: NSError?) in
  ...
})

closure代碼中习勤,可以使用 $0 $1 $2 來代替參數(shù)。

如果調(diào)用的方法的最后一個(gè)參數(shù)是一個(gè)closure焙格,那么可以對掉用進(jìn)行簡寫:

let dataTask = session.dataTaskWithURL(url) {
  data, response, error in
  ...
}

不簡寫的版本是:

let dataTask = session.dataTaskWithURL(url, completionHandler:{
  data, response, error in
  ...
})

簡寫的版本更加易讀姻报。

closure也可以用作 初始化對象 和lazy loading

lazy var dateFormatter: NSDateFormatter = {
  let formatter = NSDateFormatter()
  formatter.dateStyle = .MediumStyle
  formatter.timeStyle = .ShortStyle
  return formatter
}()

Swift中所有的 方法 都是closure,可以直接將一個(gè)已有的方法當(dāng)做closure在參數(shù)中進(jìn)行傳遞间螟,只要 參數(shù)列表是匹配的。

let dataTask = session.dataTaskWithURL(url,
    completionHandler: myCompletionHandlerMethod)
func myCompletionHandlerMethod(data: NSData?,
    response: NSURLResponse?, error: NSError?) {
   ...
}

closure會(huì)捕獲所有在內(nèi)部使用的變量损肛,包括self厢破,會(huì)有幾率造成引用循環(huán)和內(nèi)存泄露,解決方法:

let dataTask = session.dataTaskWithURL(url) {
  [weak self] data, response, error in
  ...
}

最后:Swift支持一種no escapeclosure治拿,后續(xù)再補(bǔ)充:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摩泪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子劫谅,更是在濱河造成了極大的恐慌见坑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捏检,死亡現(xiàn)場離奇詭異荞驴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贯城,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門熊楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人能犯,你說我怎么就攤上這事鲫骗∪埽” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵执泰,是天一觀的道長枕磁。 經(jīng)常有香客問我,道長术吝,這世上最難降的妖魔是什么计济? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮顿苇,結(jié)果婚禮上峭咒,老公的妹妹穿的比我還像新娘。我一直安慰自己纪岁,他們只是感情好凑队,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幔翰,像睡著了一般漩氨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遗增,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天叫惊,我揣著相機(jī)與錄音,去河邊找鬼做修。 笑死霍狰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饰及。 我是一名探鬼主播蔗坯,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼燎含!你這毒婦竟也來了宾濒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤屏箍,失蹤者是張志新(化名)和其女友劉穎绘梦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赴魁,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卸奉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颖御。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片择卦。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秉继,到底是詐尸還是另有隱情祈噪,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布尚辑,位于F島的核電站辑鲤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏杠茬。R本人自食惡果不足惜月褥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓢喉。 院中可真熱鬧宁赤,春花似錦、人聲如沸栓票。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽走贪。三九已至佛猛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坠狡,已是汗流浹背继找。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留逃沿,地道東北人婴渡。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像凯亮,于是被迫代替她去往敵國和親边臼。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS[https://github...
    香橙柚子閱讀 8,550評(píng)論 0 35
  • 86.復(fù)合 Cases 共享相同代碼塊的多個(gè)switch 分支 分支可以合并, 寫在分支后用逗號(hào)分開触幼。如果任何模式...
    無灃閱讀 1,367評(píng)論 1 5
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,805評(píng)論 1 10
  • 即使寒風(fēng)吹彎了我的身軀 我也要傲然挺立 屬于我的劫難 我唯有自渡
    廣意_閱讀 203評(píng)論 0 5
  • 好多年的記憶,媽媽在天堂;好多年的想念究飞,媽媽在天堂;好多年的掛心置谦,好媽在天堂。天堂也許很快樂亿傅,聽不到你的哭泣媒峡。天堂...
    buguxinyousanba閱讀 419評(píng)論 0 0