欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)代碼塊,可以在代碼中使用和傳遞,相當(dāng)于一個匿名函數(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)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Swift算法之二叉樹實現(xiàn)的方法示例

    Swift算法之二叉樹實現(xiàn)的方法示例

    二叉樹是計算機科學(xué)中最基本也是最重要的樹型結(jié)構(gòu),最常見的二叉樹生成算法通常是使用遞歸或者其他描述類語言的方法來實現(xiàn)。本文主要介紹了Swift算法之二叉樹實現(xiàn)的方法,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Swift類型創(chuàng)建之自定義一個類型詳解

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

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

    詳解Swift中的下標(biāo)訪問用法

    在Swift中我們可以用subscript函數(shù)來定義下標(biāo),從而通過下標(biāo)來訪問數(shù)組與字典等數(shù)據(jù)結(jié)構(gòu),這里我們就來詳解Swift中的下標(biāo)訪問用法:
    2016-07-07
  • Swift UIButton使用教程

    Swift UIButton使用教程

    這篇文章主要介紹了Swift UIButton的使用方法,幫助大家更好的理解和學(xué)習(xí)swift編程,感興趣的朋友可以了解下
    2020-09-09
  • 在?Swift?中編寫Git?Hooks腳本的方法

    在?Swift?中編寫Git?Hooks腳本的方法

    在本例中,我使用了?commit-msg?鉤子,它能夠在當(dāng)前提交信息生效前修改此信息,鉤子由一個參數(shù)調(diào)用,該參數(shù)是指向包含用戶輸入的提交消息的文件的路徑,這意味著,為了改變提交消息,我們只需要從文件中讀取、修改其內(nèi)容,然后寫回調(diào)用掛鉤的文件
    2022-06-06
  • Swift學(xué)習(xí)教程之訪問控制詳解

    Swift學(xué)習(xí)教程之訪問控制詳解

    訪問控制可以限定你在源文件或模塊中訪問代碼的級別,也就是說可以控制哪些代碼你可以訪問,哪些代碼你不能訪問。下面這篇文章主要給大家介紹了關(guān)于Swift學(xué)習(xí)教程之訪問控制的相關(guān)資料,需要的朋友可以參考下。
    2017-08-08
  • Swift泛型Generics淺析講解

    Swift泛型Generics淺析講解

    泛型代碼讓你能根據(jù)你所定義的要求,寫出可以用于任何類型的靈活的、可復(fù)用的函數(shù)。泛型是 Swift 最強大的特性之一,很多 Swift 標(biāo)準庫是基于泛型代碼構(gòu)建的
    2022-08-08
  • swift版webview加載網(wǎng)頁進度條效果

    swift版webview加載網(wǎng)頁進度條效果

    這篇文章主要為大家詳細介紹了swift實現(xiàn)webview加載網(wǎng)頁進度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Swift實現(xiàn)簡單計算器項目

    Swift實現(xiàn)簡單計算器項目

    這篇文章主要為大家詳細介紹了Swift實現(xiàn)簡單計算器項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Swift 4中一些實用的數(shù)組技巧小結(jié)

    Swift 4中一些實用的數(shù)組技巧小結(jié)

    這篇文章主要給大家分享了關(guān)于Swift 4中一些實用的數(shù)組技巧,文中通過示例代碼介紹的介紹的非常詳細,對大家學(xué)習(xí)或者使用swift具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03

最新評論