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

Objective-C中的block與Swift中的尾隨閉包使用教程

 更新時(shí)間:2017年12月09日 10:28:26   作者:小時(shí)候De_我  
Block是OC中的閉包,他和swift中的閉包有什么區(qū)別呢?下面這篇文章就來給大家介紹關(guān)于Objective-C中的block與Swift中的尾隨閉包使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。

前言

在項(xiàng)目開發(fā)中經(jīng)常會(huì)去查iOS閉包怎么寫,因?yàn)樗恼Z法太古怪,兩種語言寫法不一,經(jīng)常搞混,干脆記錄下常用的寫法算了

閉包定義

閉包是指可以包含自由(未綁定到特定對(duì)象)變量的代碼塊;這些變量不是在這個(gè)代碼塊內(nèi)或者任何全局上下文中定義的,而是在定義代碼塊的環(huán)境中定義(局部變量)?!伴]包” 一詞來源于以下兩者的結(jié)合:要執(zhí)行的代碼塊(由于自由變量被包含在代碼塊中,這些自由變量以及它們引用的對(duì)象沒有被釋放)和為自由變量提供綁定的計(jì)算環(huán)境(作用域)。

OC中的block與Swift中的尾隨閉包都起到了將參數(shù)作為返回值的作用,也就是常說的回調(diào)。

1. block的使用

在OC中block主要分為三種,分別是

    (1)_NSConcreteGlobalBlock 全局靜態(tài),

    (2)_NSConcreteStackBlock 保存在棧中,出函數(shù)作用域就銷毀,

    (3)_NSConcreteMallocBlock 保存在堆中,retainCount == 0銷毀。

而我們?cè)谑褂胋lock時(shí)大致分為以下幾步:

//1.使用typedef定義一個(gè)block
typedef void(^CallBack1)(); //不帶參數(shù) 
typedef void(^CallBack2)(NSString *test); //帶參數(shù)
//2.通過屬性聲明
@property (nonatomic, copy) CallBack callBack;
//3.通過函數(shù)方法聲明
- (void)functionCallBack:(CallBack)callBack;

其實(shí)呢,如果寫的比較熟練了,也可以連著一起定義:

@property (nonatomic, strong) void(^ completed1)();//不帶參數(shù)
@property (nonatomic, strong) void(^ completed2)(NSString *test);//帶參數(shù)
- (void) functionCallBack:(void(^)())completed1;//不帶參數(shù)
- (void) functionCallBack:(void(^)(NSString *test))completed2;//帶參數(shù)

2. 尾隨閉包的使用

在Swift中,閉包是一段自包含的函數(shù)代碼塊,可以在代碼中使用和傳遞,相當(dāng)于一個(gè)匿名函數(shù)。

那么尾隨閉包就是這個(gè)函數(shù)的最后一個(gè)參數(shù)是一個(gè)閉包,所以規(guī)定這個(gè)閉包既可以寫在函數(shù)的參數(shù)括號(hào)里面,也可以直接放在最后面來使用,就像重新給這個(gè)函數(shù)定義了一次一樣。

并且,它的寫法和block很相似:

//1.使用typealias定義
typealias functionBlock1 = () -> ()//不帶參數(shù)
typealias functionBlock2 = (String) -> ()//帶參數(shù)
//2.聲明函數(shù)體
func blockTest1(complete: (functionBlock1)) -> () {
  complete()
}
func blockTest2(complete: (functionBlock2)) -> () {
  let re: String = "Cookie"
  complete(re)
}
//3.使用函數(shù)
blockTest1 {}
blockTest2{ (result) in
   print(result)
}

同樣的,如果寫的比較熟練了,也可以連著一起定義:

//1.聲明函數(shù)體
func blockTest(complete: (_ result: String)->()) -> () {
  
  let re: String = "Cookie"
  complete(re)
}
//2.使用函數(shù)
blockTest { (result) in
   
   print(result)
}

除此之外,swift中的閉包還包括逃逸閉包,這個(gè)閉包在函數(shù)返回之后才被執(zhí)行,我們稱該閉包從函數(shù)中逃逸,多用來做函數(shù)回調(diào),與Objective-C里的Block有異曲同工之妙。自動(dòng)閉包,作為參數(shù)傳遞給函數(shù)時(shí),可以將閉包定義為自動(dòng)閉包(使用關(guān)鍵字@autoclosure),這樣傳遞參數(shù)時(shí),可以直接傳遞一段代碼(或者一個(gè)變量、表達(dá)式),系統(tǒng)會(huì)自動(dòng)將這段代碼轉(zhuǎn)化成閉包。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Swift中添加雙擊手勢(shì)識(shí)別器

    Swift中添加雙擊手勢(shì)識(shí)別器

    在這次IOS應(yīng)用開發(fā)教程中,我們打算實(shí)現(xiàn)手勢(shì)識(shí)別。正如你所知道的,IOS支持大量的手勢(shì)操作,它們能提供了很好的應(yīng)用控制和出色用戶體驗(yàn)。
    2019-08-08
  • swift實(shí)現(xiàn)隨機(jī)背景色

    swift實(shí)現(xiàn)隨機(jī)背景色

    這篇文章主要為大家詳細(xì)介紹了swift實(shí)現(xiàn)隨機(jī)背景色,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Swift中轉(zhuǎn)義閉包示例詳解

    Swift中轉(zhuǎn)義閉包示例詳解

    在Swift 中的閉包類似于結(jié)構(gòu)塊,并可以在任何地方調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Swift中轉(zhuǎn)義閉包的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解

    Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解

    這篇文章主要為大家介紹了Swift并發(fā)系統(tǒng)并行運(yùn)行多個(gè)任務(wù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • RxSwift使用技巧之過濾操作詳解

    RxSwift使用技巧之過濾操作詳解

    RxSwift的目的是讓讓數(shù)據(jù)/事件流和異步任務(wù)能夠更方便的序列化處理,能夠使用Swift進(jìn)行響應(yīng)式編程,下面這篇文章主要給大家介紹了關(guān)于RxSwift使用技巧之過濾操作的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • swift指針及內(nèi)存管理內(nèi)存綁定實(shí)例詳解

    swift指針及內(nèi)存管理內(nèi)存綁定實(shí)例詳解

    這篇文章主要為大家介紹了swift指針及內(nèi)存管理內(nèi)存綁定實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • swift語言AutoreleasePool原理及使用場(chǎng)景

    swift語言AutoreleasePool原理及使用場(chǎng)景

    這篇文章主要為大家介紹了swift語言AutoreleasePool原理及使用場(chǎng)景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Swift類型創(chuàng)建之自定義一個(gè)類型詳解

    Swift類型創(chuàng)建之自定義一個(gè)類型詳解

    這篇文章主要介紹了Swift類型創(chuàng)建之自定義一個(gè)類型詳解,本文講解了自定義原型、實(shí)現(xiàn)默認(rèn)值、支持基本布爾型初始化、支持Bool類型判斷、支持兼容各們各派的類型、完善OCBool的布爾基因體系等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • swift依賴注入和依賴注入容器詳解

    swift依賴注入和依賴注入容器詳解

    這篇文章主要為大家介紹了swift依賴注入和依賴注入容器詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Swift循環(huán)遍歷集合的方法總結(jié)分享

    Swift循環(huán)遍歷集合的方法總結(jié)分享

    SWIFT是蘋果于2014年WWDC發(fā)布的新開發(fā)語言,可與Objective-C*共同運(yùn)行于Mac OS和iOS平臺(tái),用于搭建基于蘋果平臺(tái)的應(yīng)用程序。這篇文章主要給大家總結(jié)介紹了關(guān)于Swift循環(huán)遍歷集合的方法,如for-in循環(huán)、for循環(huán)以及基于塊的遍歷等方法,需要的朋友可以參考下。
    2017-03-03

最新評(píng)論

贞丰县| 天柱县| 宿迁市| 德令哈市| 若羌县| 克拉玛依市| 汕头市| 泸西县| 桓台县| 寿阳县| 阳西县| 佛教| 晴隆县| 广元市| 渝北区| 江山市| 锡林浩特市| 大丰市| 新野县| 军事| 宝应县| 桂林市| 中卫市| 金秀| 河东区| 洛阳市| 宁强县| 阿克苏市| 宜都市| 五常市| 太仓市| 高台县| 南投县| 诸城市| 沁阳市| 云林县| 阳西县| 柳林县| 宾阳县| 太保市| 巴林右旗|