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

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

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

前言

在項目開發(fā)中經(jīng)常會去查iOS閉包怎么寫,因為它的語法太古怪,兩種語言寫法不一,經(jīng)常搞混,干脆記錄下常用的寫法算了

閉包定義

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

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

1. block的使用

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

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

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

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

而我們在使用block時大致分為以下幾步:

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

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

@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ù)代碼塊,可以在代碼中使用和傳遞,相當于一個匿名函數(shù)。

那么尾隨閉包就是這個函數(shù)的最后一個參數(shù)是一個閉包,所以規(guī)定這個閉包既可以寫在函數(shù)的參數(shù)括號里面,也可以直接放在最后面來使用,就像重新給這個函數(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中的閉包還包括逃逸閉包,這個閉包在函數(shù)返回之后才被執(zhí)行,我們稱該閉包從函數(shù)中逃逸,多用來做函數(shù)回調(diào),與Objective-C里的Block有異曲同工之妙。自動閉包,作為參數(shù)傳遞給函數(shù)時,可以將閉包定義為自動閉包(使用關(guān)鍵字@autoclosure),這樣傳遞參數(shù)時,可以直接傳遞一段代碼(或者一個變量、表達式),系統(tǒng)會自動將這段代碼轉(zhuǎn)化成閉包。

總結(jié)

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

相關(guān)文章

  • Swift中添加雙擊手勢識別器

    Swift中添加雙擊手勢識別器

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

    swift實現(xiàn)隨機背景色

    這篇文章主要為大家詳細介紹了swift實現(xiàn)隨機背景色,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    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)并行運行多個任務(wù)使用詳解

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

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

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

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

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

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

    swift語言AutoreleasePool原理及使用場景

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

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

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

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

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

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

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

最新評論

阳朔县| 建始县| 阜康市| 乐至县| 云南省| 定陶县| 千阳县| 阳新县| 星座| 新建县| 沁源县| 漳州市| 大悟县| 东乌珠穆沁旗| 呼玛县| 莆田市| 阿瓦提县| 阳曲县| 岳池县| 牡丹江市| 景洪市| 东乌| 柳江县| 水富县| 随州市| 额尔古纳市| 重庆市| 禹州市| 巩留县| 敦化市| 湛江市| 房山区| 清河县| 连州市| 乌兰县| 林甸县| 耒阳市| 芜湖市| 克拉玛依市| 灵丘县| 沁水县|