国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Swift > 正文

深入解析Swift代理模式

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

配置如下:

      Xcode 8.2

      Swift 3.0

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

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

Objective-C 代理模式

在介紹 Swift 代理模式前,先來看回顧一下 Objective-C 中的代理模式如何實現

Objective-C 中用代理實現反向傳值:

swift,代理,swift3,swift3.0

委托方(子控制器)

委托方需要實現

創建協議 、聲明協議方法

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

創建一個代理屬性

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

執行協議方法

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

代理方(主控制器)

代理方需要實現

遵守(繼承)協議

 @interface ViewController () <SubViewDelegate>

將代理設為自己

 subVC.delegate = self;

實現代理方法

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

Swift 代理模式

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

Swift 中用代理實現反向傳值:

swift,代理,swift3,swift3.0

委托方(子控制器)

創建協議 、聲明協議方法

 protocol SubViewDelegate { func backStr(str: String) } 

創建一個代理屬性

 var delegate: SubViewDelegate?

執行協議方法

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

代理方(主控制器)

繼承協議

 class ViewController: UIViewController, SubViewDelegate

將代理設為自己

 subVC.delegate = self

實現代理方法

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

總結

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

值得一提的是Swift 的擴展 extension可以用來繼承協議,實現代碼隔離,便于維護。

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

最后附上Demo源碼

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

 

注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 年辖:市辖区| 资溪县| 阿合奇县| 贺州市| 罗源县| 林口县| 萍乡市| 陈巴尔虎旗| 定州市| 溧阳市| 莎车县| 罗江县| 林口县| 邳州市| 名山县| 施秉县| 中方县| 曲沃县| 清徐县| 沅陵县| 道真| 个旧市| 鄂伦春自治旗| 曲阜市| 江阴市| 三台县| 聂荣县| 托克托县| 湟源县| 兰西县| 禹州市| 拜城县| 永清县| 卓资县| 嘉定区| 郑州市| 淄博市| 布拖县| 邢台县| 正蓝旗| 喀喇|