深入解析Swift代理模式

发布时间 - 2026-01-10 23:29:05    点击率:

配置如下:

      Xcode 8.2

      Swift 3.0

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

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

Objective-C 代理模式

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

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

委托方(子控制器)

委托方需要实现

创建协议 、声明协议方法

 @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 中用代理实现反向传值:

委托方(子控制器)

创建协议 、声明协议方法

 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源码

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# swift  # 代理  # swift3  # swift3.0  # Swift 5.1 之类型转换与模式匹配的教程详解  # 深入讲解Swift中的模式匹配  # 深入理解Swift中单例模式的替换及Swift 3.0单例模式的实现  # swift where与匹配模式的实例详解  # IOS Swift3 四种单例模式详解及实例  # 仓库模式及其在Swift 项目中的应用详解  # 设为  # 创建一个  # 的是  # 好了  # 这篇文章  # 谢谢大家  # 一提  # 如何实现  # 可以用来  # 完全相同  # 回传  # 具足  # 发生了  # 有疑问  # lt  # text  # center  # TabelViewDelegate  # TableViewDataSource  # align 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 利用 Google AI 进行 YouTube 视频 SEO 描述优化  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  Python并发异常传播_错误处理解析【教程】  如何在企业微信快速生成手机电脑官网?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  Python3.6正式版新特性预览  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  香港服务器租用费用高吗?如何避免常见误区?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  北京网站制作的公司有哪些,北京白云观官方网站?  七夕网站制作视频,七夕大促活动怎么报名?  JS实现鼠标移上去显示图片或微信二维码  Laravel Docker环境搭建教程_Laravel Sail使用指南  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  如何在Windows环境下新建FTP站点并设置权限?  制作旅游网站html,怎样注册旅游网站?  JavaScript模板引擎Template.js使用详解  制作公司内部网站有哪些,内网如何建网站?  在Oracle关闭情况下如何修改spfile的参数  Laravel如何保护应用免受CSRF攻击?(原理和示例)  香港服务器部署网站为何提示未备案?  香港服务器WordPress建站指南:SEO优化与高效部署策略  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  如何快速生成可下载的建站源码工具?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  黑客入侵网站服务器的常见手法有哪些?  JavaScript如何实现路由_前端路由原理是什么  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何快速生成凡客建站的专业级图册?  英语简历制作免费网站推荐,如何将简历翻译成英文?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Java解压缩zip - 解压缩多个文件或文件夹实例  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  JavaScript常见的五种数组去重的方式  高防服务器租用指南:配置选择与快速部署攻略  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何快速生成高效建站系统源代码?  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  活动邀请函制作网站有哪些,活动邀请函文案?  高防服务器如何保障网站安全无虞?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  教学论文网站制作软件有哪些,写论文用什么软件 ?  如何在万网自助建站平台快速创建网站?  javascript中的try catch异常捕获机制用法分析  php结合redis实现高并发下的抢购、秒杀功能的实例