Swift中Delegate的正确使用姿势
2017-06-22 本文已影响468人
陳云峰
前言
委托(delegate)是Cocoa的一个术语,表示将一个对象的部分功能转交给另一个对象。
比如对象A希望对象B知道将要发生或已经发生某件事情,对象A可以把对象B的引用存为一个实例变量。这个对象B称为委托。当事件发生时,它检查委托对象是否实现了与该事件相适应的方法。如果已经实现,则调用该方法。
由于松耦合的原因,一个对象能成为多个对象的委托。某些情况下,相较于通过继承让子类实现相关的处理方法,可以有效减少代码复杂度。所以iOS中也大量的使用了委托。
目标
在A类里面声明一个ADelegate的代理,B类遵循并使用ADelegate定义的函数。
实现
A.swift
//创建协议
protocol ADelegate:NSObjectProtocol
{
//回调方法 传一个String类型的值
func delegateMethod(string:String)
}
class A: UIViewController
{
weak var delegate:ADelegate?
override func viewDidLoad()
{
super.viewDidLoad()
...
}
func goBack()
{
//调用代理方法
if delegate != nil
{
delegate?.delegateMethod(string:"123")
self.navigationController?.popToRootViewControllerAnimated(true)
}
}
}
B.swift
class A: UIViewController, ADelegate
{
override func viewDidLoad()
{
super.viewDidLoad()
...
}
//push
func nextPage()
{
let aController = A()
//指定代理
aController.delegate = self
self.navigationController!.pushViewController(aController, animated:true)
}
//接收传过来的值
func delegateMethod(string:String)
{
...
}
}
总结
Objective-C中delegate的实现和Swift中delegate基本一样的,委托也是iOS编程中常见的一种设计模式。在平常使用过程中,要多加注意,才能更加熟练地使用。