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

深入解析Swift代理模式

 更新時(shí)間:2017年03月07日 09:28:21   作者:BY  
委托(代理)是一種設(shè)計(jì)模式,它允許類或結(jié)構(gòu)體將一些需要它們負(fù)責(zé)的功能交由(委托)給其他的類型。下面這篇文章主要介紹了Swift代理模式的相關(guān)資料,文章開始先介紹了Objective-C相關(guān)的內(nèi)容,需要的朋友可以參考借鑒,下面來一起看看吧。

配置如下:

      Xcode 8.2

      Swift 3.0

在iOS開發(fā)中,無論是 Objective-C 還是 Swift ,Delegate 有著具足輕重的位置,如TabelViewDelegate 與 TableViewDataSource。

Swift 中的代理模式 和 Objective-C 除了語法外,幾乎一樣。

Objective-C 代理模式

在介紹 Swift 代理模式前,先來看回顧一下 Objective-C 中的代理模式如何實(shí)現(xiàn)

Objective-C 中用代理實(shí)現(xiàn)反向傳值:

委托方(子控制器)

委托方需要實(shí)現(xiàn)

創(chuàng)建協(xié)議 、聲明協(xié)議方法

 @protocol SubViewDelegate <NSObject>
 
 - (void)backWithStr:(NSString *) str;

 @end

創(chuàng)建一個代理屬性

 // weak聲明
 @property (nonatomic, weak) id<SubViewDelegate> delegate;

執(zhí)行協(xié)議方法

 // 判斷代理是實(shí)現(xiàn)該方法,避免carsh
 if ([self.delegate respondsToSelector:@selector(backWithStr:)]) {
 [self.delegate backWithStr:self.textField.text];
 }

代理方(主控制器)

代理方需要實(shí)現(xiàn)

遵守(繼承)協(xié)議

 @interface ViewController () <SubViewDelegate>

將代理設(shè)為自己

 subVC.delegate = self;

實(shí)現(xiàn)代理方法

 - (void)backWithStr:(NSString *)str {
 self.label.text = str;
 }

Swift 代理模式

Swift 代理模式 與 Objective-C 一樣,只是語法不同。

Swift 中用代理實(shí)現(xiàn)反向傳值:

委托方(子控制器)

創(chuàng)建協(xié)議 、聲明協(xié)議方法

 protocol SubViewDelegate {
 func backStr(str: String)
 } 

創(chuàng)建一個代理屬性

 var delegate: SubViewDelegate?

執(zhí)行協(xié)議方法

 /// 執(zhí)行代理方法,將值回傳
 delegate?.backStr(str: textField.text ?? "")

代理方(主控制器)

繼承協(xié)議

 class ViewController: UIViewController, SubViewDelegate

將代理設(shè)為自己

 subVC.delegate = self

實(shí)現(xiàn)代理方法

 func backStr(str: String) {
  self.textF.text = str
 }

總結(jié)

對比可以方法 Swift 代理模式 與 Objective-C 用法完全相同,只是語法發(fā)生了變化。

值得一提的是Swift 的擴(kuò)展 extension可以用來繼承協(xié)議,實(shí)現(xiàn)代碼隔離,便于維護(hù)。

/// 使用擴(kuò)展繼承協(xié)議 實(shí)現(xiàn)協(xié)議方法 可以分離代碼
extension ViewController: SubViewDelegate{
 /// 實(shí)現(xiàn)代理方法
 func backStr(str: String) {
  self.textF.text = str
 }
}

最后附上Demo源碼

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Swift使用編解碼庫Codable的過程詳解

    Swift使用編解碼庫Codable的過程詳解

    Codable 是 Swift 引入的全新的編解碼庫,使開發(fā)者更方便的解析JSON 或 plist 文件,支持枚舉、結(jié)構(gòu)體和類,這篇文章主要介紹了Swift使用編解碼庫Codable,需要的朋友可以參考下
    2023-09-09
  • Swift使用enum抹平數(shù)組元素差異實(shí)例詳解

    Swift使用enum抹平數(shù)組元素差異實(shí)例詳解

    這篇文章主要為大家介紹了Swift使用enum抹平數(shù)組元素差異實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Swift中通知中心(NotificationCenter)的使用示例

    Swift中通知中心(NotificationCenter)的使用示例

    這篇文章主要給大家介紹了關(guān)于Swift中通知中心(NotificationCenter)使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 特定用例下的Combine全面使用詳解

    特定用例下的Combine全面使用詳解

    這篇文章主要為大家介紹了特定用例下的Combine全面使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • swift語言Codable?用法及原理詳解

    swift語言Codable?用法及原理詳解

    這篇文章主要為大家介紹了swift語言Codable?用法及原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 詳解Swift編程中的for循環(huán)的編寫方法

    詳解Swift編程中的for循環(huán)的編寫方法

    這篇文章主要介紹了Swift編程中的for循環(huán)的編寫方法,包括相關(guān)的for...in循環(huán),需要的朋友可以參考下
    2015-11-11
  • SwiftUI?List在MacOS中的性能優(yōu)化示例

    SwiftUI?List在MacOS中的性能優(yōu)化示例

    這篇文章主要為大家介紹了SwiftUI?List在MacOS中的性能優(yōu)化示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Swift實(shí)現(xiàn)表格視圖單元格單選(2)

    Swift實(shí)現(xiàn)表格視圖單元格單選(2)

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)表格視圖單元格單選的第二篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Swift設(shè)置UILabel內(nèi)邊距的實(shí)例代碼

    Swift設(shè)置UILabel內(nèi)邊距的實(shí)例代碼

    有時(shí)候,我們需要一個顯示文字,又想這些文字與邊界之間有自定義的邊距,所以下面這篇文章主要給大家介紹了關(guān)于Swift設(shè)置UILabel內(nèi)邊距的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題詳解

    iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題詳解

    UICollectionView是iOS中比較常見的一個控件,這篇文章主要給大家介紹了關(guān)于iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12

最新評論

湛江市| 阿巴嘎旗| 阿勒泰市| 大石桥市| 泗阳县| 栾川县| 江川县| 渝中区| 凤冈县| 高尔夫| 乌拉特前旗| 应城市| 年辖:市辖区| 吉木萨尔县| 鹤庆县| 西乡县| 德昌县| 东方市| 怀远县| 三都| 巴马| 上思县| 靖安县| 望都县| 理塘县| 兴和县| 金川县| 开鲁县| 柳林县| 勐海县| 昔阳县| 长丰县| 临清市| 乐山市| 孝义市| 遵化市| 塔河县| 花垣县| 苍梧县| 安吉县| 霍山县|