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编程中常见的一种设计模式。在平常使用过程中,要多加注意,才能更加熟练地使用。

上一篇下一篇

猜你喜欢

热点阅读