深入解析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实现高并发下的抢购、秒杀功能的实例

