Swift —— delegate 设计模式

一、什么是 delegate 模式

所谓 delegate 就是代理模式。简单来说,delegate 模式就是在类的函数里运行完一段代码后,你可以通过一个符合某个代理协议的属性来调代理的方法。其中,代理方法就是回调函数。

二、delegate 模式与闭包比的优势

如果只看 delegate 与 闭包对同一个函数的影响,其实 delegate 和闭包并没有什么区别。但如果对于多个类来说,delegate 可以由于有一个类是专门存协议函数的实现的,因此多个函数在调同一个回调函数时,我们就不用像传闭包那样需要写多个相同的闭包了,直接调代理协议里的函数就行了。

三、delegate 模式的组成

delegate 模式由 3 样东西组成:类专用的代理协议、有符合代理协议的属性的类、代理方法的实现的类。

四、如何实现 delegate 模式

Swift 复制代码
protocol DelegateProtocol: AnyObject { // 类专属的代理协议
	func sig1()
	func sig2()
}

class Delegated { // 被代理的类
	weak var delegate: DelegateProtocol?
	
	func foo() {
		// ... 一段代码
		delegate?.sig1() // 调代理方法,可以理解成回调函数的一种
	}
}

class Delegate: DelegateProtocol { // 这个代理类就是专门存回调函数的实现的
	func sig1() {
		print("sig1")
	}
	
	func sig2() {
		print("sig2")
	}
}
相关推荐
weixin_5134499622 分钟前
walk_these_ways项目学习记录第八篇(通过行为多样性 (MoB) 实现地形泛化)--策略网络
开发语言·人工智能·python·学习
飞Link27 分钟前
逆向兼容的桥梁:3to2 自动化降级工具实现全解析
运维·开发语言·python·自动化
曾阿伦36 分钟前
Python3 文件 (夹) 操作备忘录
开发语言·python
dong__csdn44 分钟前
jdk添加信任证书
java·开发语言
南 阳1 小时前
Python从入门到精通day64
开发语言·python
tangweiguo030519871 小时前
SwiftUI布局完全指南:从入门到精通
ios·swift
花千树-0102 小时前
Java 接入多家大模型 API 实战对比
java·开发语言·人工智能·ai·langchain·ai编程
UXbot2 小时前
AI原型设计工具评测:从创意到交互式Demo,5款产品全面解析
前端·ui·设计模式·ai·ai编程·原型模式
上海合宙LuatOS2 小时前
LuatOS扩展库API——【exremotecam】网络摄像头控制
开发语言·网络·物联网·lua·luatos
feng_you_ying_li2 小时前
C++11,{}的初始化情况与左右值及其引用
开发语言·数据结构·c++