Swift中Delegate的正确使用姿势

前言

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,305评论 4 61
  • 每个人心中或许都有一段挥之不去,难以触碰的感情吧,那感情里住着一个人,一个不再有可能会在一起的人。 前几日回家,和...
    一只任性的猪阅读 989评论 0 0
  • 一:信仰和文化 什么是信仰?信仰是人在内心中把某个人、某件事、某个宗教、理念当做行为准则。顶级的信仰,就是宗教。犹...
    谢江华阅读 616评论 0 0
  • 【大楚小斯】的情书 爸爸妈妈已经踏上了返回的行程,你们俩被留在了爷爷奶奶家。 离别的时候哥哥很淡定,在我们...
    浮沉浮沉阅读 202评论 0 0
  • 运营都要做什么?做运营的人应该都能说出很长很长时间,特别是刚入行的运营人员,如果让大家总结成一句话,那可能就是“打...
    浪里一清阅读 444评论 0 2