Swift - 委托(delegate)的介绍,及使用样例
作者:hangge | 2015-08-07 09:19
1,委托的说明
委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象。
比如对象A希望对象B知道将要发生或已经发生某件事情,对象A可以把对象B的引用存为一个实例变量。这个对象B称为委托。当事件发生时,它检查委托对象是否实现了与该事件相适应的方法。如果已经实现,则调用该方法。
2,委托的使用样例
下面通过用户登录类,日志记录类来演示委托的用法。(其中日志记录类来充当用户登录类的委托)
//定义一个协议
protocol LogManagerDelegate {
func writeLog()
}
//用户登录类
class UserController {
var delegate : LogManagerDelegate?
func login() {
//查看是否有委托,然后调用它
delegate?.writeLog()
}
}
//日志管理类
class SqliteLogManager : LogManagerDelegate {
func writeLog() {
print("将日志记录到sqlite数据库中")
}
}
//使用
let userController = UserController()
userController.login() //不做任何事
let sqliteLogManager = SqliteLogManager()
userController.delegate = sqliteLogManager
userController.login() //输出“将日志记录到sqlite数据库中”
全部评论(4)
有没有样例代码,还有闭包
站长回复:可以看看我原先写的文章:
Swift - 创建代理协议实现页面间参数传递和方法调用(http://www.hangge.com/blog/cache/detail_717.html)
Swift - 闭包的介绍及用法(以数组排序为例)(http://www.hangge.com/blog/cache/detail_809.html)
大爱这个网站了,希望越来越好
站长回复:谢谢你能喜欢,我会继续创作更多更好的文章,欢迎常来看看。
Good,目前看过了 swift 教程,最棒的一个站点了
站长回复:谢谢,欢迎常来看看
var delegate : LogManagerDelegate?
weak var delegate : LogManagerDelegate?
站长回复:前面可以不需要加weak,两个类对象如果都强引用对方,才会导致内存泄露。单向引用没问题。