Swift 之 delegate

作者: IOS_Wek | 来源:发表于2016-11-02 21:25 被阅读344次

    一 代理的理解
    Delegate 是IOS开发一个比较重要的概念,反正我开发的时候遇到很多,所以不熟悉也得熟悉,刚开始学习有些不解,直到真正用到时候才会觉得它很有必要,个人觉得delegate 要解决的问题就是:两个 Controller A 和 B, A需要完成一些事,但是自己做不了,只能B才能帮忙实现。例如A想实现从B 跳转到另外一个页面这件事。那么只能B来帮忙实现,所以代理就出现了。所以实现Delegate 只需要两个步骤 1, A定义代理 2, B实现代理 最后A 就可以调用代理了。

    二 代理的实现步骤

    1. A Controller 定义代理,代码如下:
    
    //代理叫AControllerDelegate,写在AController 的外边 
    
    protocol AControllerDelegate: NSObjectProtocol{
    
    fun pushToOtherController(id: NSInterger)
    
    }
    
    class AController: UIViewController{
    
    // Controller 里面要定义一个delegate 的参数,这样代码里面通过 self.delegate.pushToOtherController 的方式调用这个函数了
    
    weak var delegate: AControllerDelegate?
    
    }
    
    
    1. B Controller 实现A Controller 的代理

    如果一个类BController 已经写好了,可以直接这么写

    
    extension BController: AControllerDelegate{
    
    func pushToOtherController(id: NSInterger){
    
    //定义一个C Controller 然后push 到C Controller里面
    
    let c  = CController.init()
    
    c.id = id
    
    self.navigationController?.pushviewController(c)
    
    }
    
    }
    
    
    1. A 可以安静的调用 pushToOtherController 这个函数了, 只需要写一行代码

    self.delegate.pushToOtherController

    三 常见的问题:

    1. 调用代理发现代理为空nil

    可能原因:初始化A Controller 时候忘记初始化delegate了,参考如下初始化

    
    let a = AController.init()
    
    a.delegate = self  //这句代码就是初始化delegate
    
    
    1. A Controller忘记定义delegate参数了导致 A Controller代码self.delegate 出错

    记得在A Controller里面添加一个属性

    weak var delegate: AControllerDelegate?

    相关文章

      网友评论

        本文标题:Swift 之 delegate

        本文链接:https://www.haomeiwen.com/subject/sgcbuttx.html