美文网首页
浅谈代理模式(Delegate)

浅谈代理模式(Delegate)

作者: 小旗_96e8 | 来源:发表于2020-05-05 18:48 被阅读0次

委托(代理)是一种设计模式,它允许类或结构体将一些需要它们负责的功能交由(委托)给其他的类型。下面这篇文章主要介绍了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

 }

}

相关文章

  • 浅谈代理模式(Delegate)

    委托(代理)是一种设计模式,它允许类或结构体将一些需要它们负责的功能交由(委托)给其他的类型。下面这篇文章主要介绍...

  • iOS 代理

    浅谈代理(delegate),我们在开发中,经常遇到实现某一个类的.delegate = self,然后实现它的代...

  • Proxy和的delegate区别

    Proxy和的delegate区别 在ios中使用proxy代理模式,经常容易和delegate委托模式混淆。 委...

  • iOS开发常见问题集之Delegate

    0 关键词 代理模式、delegate 1 概述 Delegate是Cocoa的精髓之一,Delegate在Coc...

  • OC基础-(三)代理、通知

    代理(Delegate) Q: 什么是代理? 准确的说代理是一直软件设计模式(代理模式) iOS中以@protoc...

  • 代理模式--delegate

    前言: 最近回顾了delegate,当初学习的时候就是简单的学习了delegate的使用规范,对于为什么这么写,脑...

  • iOS内存泄漏的几种情况

    1.Delegate/NSNotification 在使用代理设计模式的时候,一定要注意将 delegate 变量...

  • 代理模式——基础的设计

      代理模式(Proxy Pattern)也称委托模式(Delegate Pattern),是一种结构型设计模式,...

  • delegate的使用方式(初学者)

    初学delegate,记录下,以防忘记 代理模式是一种消息传递方式,一个完整的代理模式包括:委托对象、代理对象和协...

  • 设计模式 - delegate(委托/代理模式)

    delegate(委托/代理模式) 委托/代理模式的优点: 单一一个类无法表现复杂的设计 设计拆分 方便重用 相对...

网友评论

      本文标题:浅谈代理模式(Delegate)

      本文链接:https://www.haomeiwen.com/subject/ylkvghtx.html