浅谈代理模式(Delegate)

委托(代理)是一种设计模式,它允许类或结构体将一些需要它们负责的功能交由(委托)给其他的类型。下面这篇文章主要介绍了Swift代理模式的相关资料,文章开始先介绍了Objective-C相关的内容,需要的朋友可以参考借鉴,下面来一起看看吧。

在iOS开发中,无论是 Objective-C 还是 Swift ,Delegate 有着具足轻重的位置,如TabelViewDelegate 与 TableViewDataSource。

Swift 中的代理模式 和 Objective-C 除了语法外,几乎一样。

Objective-C 代理模式

在介绍 Swift 代理模式前,先来看回顾一下 Objective-C 中的代理模式如何实现

Objective-C 中用代理实现反向传值:

委托方(.h)

委托方需要实现

1、创建协议 、声明协议方法

@protocol SubViewDelegate <NSObject>

- (void)backWithStr:(NSString *) str;

@end

2、创建一个代理属性

// weak声明

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

3、执行协议方法(.m)

// 判断代理是实现该方法,避免carsh

if([self.delegate respondsToSelector:@selector(backWithStr:)]) {

[self.delegate backWithStr:self.textField.text];

}

代理方(主控制器)

代理方需要实现

4、遵守(继承)协议

@interface ViewController () <SubViewDelegate>

5、将代理设为自己

subVC.delegate = self;

6、实现代理方法

- (void)backWithStr:(NSString *)str {

self.label.text = str;

}

Swift 代理模式

Swift 代理模式 与 Objective-C 一样,只是语法不同。

Swift 中用代理实现反向传值:

委托方(子控制器)

1、创建协议 、声明协议方法

protocol SubViewDelegate {

func backStr(str: String)

}

2、创建一个代理属性并执行协议方法

class DelegateModel: NSObject {

创建一个代理属性

   var delegate: SubViewDelegate?

       funcsaveInfo() {

        // Check to see if the delegate is there, then call it

      // 执行协议方法

/// 执行代理方法,将值回传

self.delegate?.backStr(str: textField.text ?? "")


       }

}

代理方(主控制器)

3、继承协议

classViewController: UIViewController, SubViewDelegate

4、将代理设为自己

subVC.delegate = self

5、实现代理方法

func backStr(str: String) {

 self.textF.text = str

}

总结

对比可以方法 Swift 代理模式 与 Objective-C 用法完全相同,只是语法发生了变化。

值得一提的是Swift 的扩展 extension可以用来继承协议,实现代码隔离,便于维护。

/// 使用扩展继承协议 实现协议方法 可以分离代码

extension ViewController: SubViewDelegate{

 /// 实现代理方法

 func backStr(str: String) {

  self.textF.text = str

 }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容