Swift 之 delegate

一 代理的理解
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?

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • iOS网络架构讨论梳理整理中。。。 其实如果没有APIManager这一层是没法使用delegate的,毕竟多个单...
    yhtang阅读 5,252评论 1 23
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,209评论 30 471
  • 37.cocoa内存管理规则 1)当你使用new,alloc或copy方法创建一个对象时,该对象的保留计数器值为1...
    如风家的秘密阅读 887评论 0 4
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,203评论 25 708