麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Swift > 正文

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

2020-03-09 17:43:00
字體:
來源:轉載
供稿:網友

前言

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

閉包定義

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

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

1. block的使用

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

    (1)_NSConcreteGlobalBlock 全局靜態,

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

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

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

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

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

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

2. 尾隨閉包的使用

在Swift中,閉包是一段自包含的函數代碼塊,可以在代碼中使用和傳遞,相當于一個匿名函數。

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

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

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

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

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

除此之外,swift/292078.html">swift中的閉包還包括逃逸閉包,這個閉包在函數返回之后才被執行,我們稱該閉包從函數中逃逸,多用來做函數回調,與Objective-C里的Block有異曲同工之妙。自動閉包,作為參數傳遞給函數時,可以將閉包定義為自動閉包(使用關鍵字@autoclosure),這樣傳遞參數時,可以直接傳遞一段代碼(或者一個變量、表達式),系統會自動將這段代碼轉化成閉包。

總結

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


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人免费毛片在线观看 | 欧美日本不卡 | 欧美日韩爱爱视频 | 女18一级大黄毛片免费女人 | 天天鲁在线视频免费观看 | javhdfreejaⅴhd| 欧美激情猛片xxxⅹ大3 | 日本不卡一区二区三区在线观看 | 一级电影免费在线观看 | 天天透天天狠天天爱综合97 | 国产91一区二区三区 | 国产一区二区三区撒尿在线 | 免费a级作爱片免费观看欧洲 | h色网站在线观看 | 国产精品剧情一区二区三区 | 主人在调教室性调教女仆游戏 | av在线等| 一区二区三视频 | 久久国产精品区 | 国产免费福利视频 | 成人在线视频精品 | 国产青草视频在线观看视频 | 91成人在线免费视频 | 全黄性性激高免费视频 | 精品国产乱码久久久久久丨区2区 | 日本爽快片100色毛片视频 | 国产精品色综合 | av中文在线观看 | 黑人日比视频 | 黄色网址免费在线 | 91性高湖久久久久久久久网站 | 91系列在线观看 | 成人午夜视屏 | 久久久精品视频免费 | 国产亚洲美女精品久久久2020 | 日韩黄色片免费看 | 深夜福利久久久 | 国产做爰全免费的视频黑人 | 成人毛片100部免费观看 | 午夜视频在线看 | av国产片 |