swift學習之閉包

基本概念

閉包類似于oc中的block,用于保存一段代碼昵慌,在需要的時候執(zhí)行
閉包是引用類型

尾隨閉包

閉包作為函數(shù)的最后一個參數(shù)出現(xiàn)時,這個閉包被稱為尾隨閉包

閉包的基本格式

{
 (參數(shù)列表) -> 返回值類型 in
//需要執(zhí)行的代碼
}

//閉包當作一個變量
let closure = {(a:String,b:String) -> String in
      return a + b
}
//閉包當作一個函數(shù)參數(shù)
func loadData(finished:() -> ())
{
     finished()
}
//閉包沒有參數(shù)有返回值
func refreshMore(finished:() -> String)
{
    print(finished())
}
//快遞員app登錄網(wǎng)絡請求
class func POST(url url:String,
                var params:[String:AnyObject]?,
                success:((responseObj:JSON)-> Void)?,
                failure:((error:NSError)-> Void)?)
{

}

閉包的執(zhí)行

(尾隨閉包)閉包在不影響語義的情況下,可以任意簡寫
Xcode會在我們編寫代碼的時候適當?shù)慕o閉包格式做出簡寫
閉包中如果只有參數(shù)沒有返回值吴菠,可以將參數(shù)列表的小括號省略橄教,用in分割參數(shù)列表與閉包體實現(xiàn)部分
尾隨閉包的閉包體可以放在函數(shù)的其他參數(shù)列表()后面
如果閉包既沒有參數(shù)又沒有返回值那么in之前到左邊大括號之間的東西都可以省略
如果閉包包體只有一句話清寇,那么可以省略返回值類型和函數(shù)題的return語句

閉包當作一個變量

let eClosure = closure("Hello","World")
print(eClosure);

閉包作為函數(shù)參數(shù)

//最原始的形態(tài)
loadloadData({() -> () in 
    print("加載數(shù)據(jù)")
})
//簡寫個方式1,尾隨閉包的閉包體移動到其他參數(shù)列表的()后面
loadData() { () -> () in
     print("加載數(shù)據(jù)")  
}

//簡寫個方式2护蝶,函數(shù)有且只有一個參數(shù)就是閉包华烟,其他參數(shù)列表的()是沒有意義的可以直接省略,這是系統(tǒng)默認的簡寫格式
loadData { () -> () in
     print("加載數(shù)據(jù)")  
}

//簡寫個方式3持灰,閉包即沒有參數(shù)也沒有返回值盔夜,那么() -> ()參數(shù)值列表和返回值類型都是沒有意義的可以省略,而in用于間隔參數(shù)列表和返回值類型堤魁,() -> ()都省略了喂链,in就沒有存在的意義了,省略
loadData 
{
     print("加載數(shù)據(jù)")  
}

//這里閉包雖然沒有參數(shù)妥泉,但是如果將()省略椭微,那么就沒有辦法區(qū)分
//String到底是返回值類型還是參數(shù)列表
refreshMore { () -> String in
    return "下拉加載更多"
}

JLBHttpTool.POST(url: LOGIN, 
                     params: param, 
                    success: { (responseObj) -> Void in
                                    //請求成功處理
                             })
                             { (error) -> Void in
                                     //請求失敗處理
}

循環(huán)引用

與OC中的block相似的,閉包同樣存在循環(huán)引用盲链,處理辦法如下
weak var weakSelf = self
[weak self]//推薦使用

loadData { [weak self]  in
     print("加載數(shù)據(jù)")  
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝇率,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子刽沾,更是在濱河造成了極大的恐慌本慕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悠轩,死亡現(xiàn)場離奇詭異间狂,居然都是意外死亡,警方通過查閱死者的電腦和手機火架,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門鉴象,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忙菠,“玉大人,你說我怎么就攤上這事纺弊∨;叮” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵淆游,是天一觀的道長傍睹。 經(jīng)常有香客問我,道長犹菱,這世上最難降的妖魔是什么拾稳? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮腊脱,結(jié)果婚禮上访得,老公的妹妹穿的比我還像新娘。我一直安慰自己陕凹,他們只是感情好悍抑,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杜耙,像睡著了一般搜骡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佑女,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天记靡,我揣著相機與錄音,去河邊找鬼珊豹。 笑死簸呈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的店茶。 我是一名探鬼主播蜕便,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贩幻!你這毒婦竟也來了轿腺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤丛楚,失蹤者是張志新(化名)和其女友劉穎族壳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趣些,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡仿荆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拢操。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡锦亦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出令境,到底是詐尸還是另有隱情杠园,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布舔庶,位于F島的核電站抛蚁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏惕橙。R本人自食惡果不足惜瞧甩,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弥鹦。 院中可真熱鬧亲配,春花似錦妹窖、人聲如沸澜躺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苍鲜。三九已至,卻和暖如春玷犹,著一層夾襖步出監(jiān)牢的瞬間混滔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工歹颓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坯屿,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓巍扛,卻偏偏與公主長得像领跛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撤奸,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

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

  • 閉包的介紹 閉包和OC中的block非常相似 OC中的block是匿名的函數(shù) Swift中的閉包是一個特殊的函數(shù) ...
    CoderLWG閱讀 225評論 0 0
  • 閉包和oc中的block非常相似吠昭,OC中的block非常像匿名的函數(shù),閉包是用來定義函數(shù)(方法的)。作用: blo...
    WMSmile閱讀 165評論 0 0
  • 在上一篇文章Swift中的變量和常量中我總結(jié)了一些自己對于變量和常量的認識胧瓜,最近學習了閉包矢棚,順便給大家分享一下關于...
    老板娘來盤一血閱讀 18,679評論 16 87
  • 閉包是自包含的函數(shù)代碼塊,可以在代碼中被傳遞和使用府喳。Swift 中的閉包與 C 和 Objective-C 中的代...
    雨影閱讀 717評論 0 2
  • swift中閉包類似于oc中的Block語句塊 一蒲肋、一個最簡單的閉包實現(xiàn) ??1 閉包就是寫好的一段代碼,然后在某一...
    巧克力的qiao閱讀 286評論 0 2