Swift中协议的可选方法的实现判断

  在OC中协议的可选方法是否实现的判断可以通过
self.delegate.responseToSelector(@selector(method))
来进行判断,如果代理对象实现了method,则执行method,如果代理对象没有实现,则不执行,如果不进行判断,在代理对象没有实现method的时候,程序会因为找不到方法二崩溃
if(self.delegate.responseToSelector(@selector(method)){[self.delegate method]}
这是oc中对可选协议方法的判断
  在编写swift协议中自定义了可选方法之后的判断则可以利用swift的可空链直接由系统进行判断,不用自己写responseToSelector方法来进行代理对象是否实现的判断:
@objc protocol xxxdelegate { optional func method()};
定义一个协议,并给其添加一个可选的方法
在类中使用的时候则可以直接通过可空链判断:
delegate?.method?()
   对于可空链,第一个问号会判断delegate是否存在,如果不存在,则直接返回nil,如果存在,则调用method,method后的问号,会直接对该方法进行判断,如果代理对象实现了method,则调用method在代理对象中的实现,如果代理对象没有实现该可选的method,则返回空,并且不会造成程序崩溃。
   一开始用swift写协议的可选方法时,以为对可选方法的实现判断应该和oc中一样,但是在实际操作中发现delegate不能调用responseToSelector方法,之后发现其直接通过可空链进行方法是否实现的判断,在swift中的optional类型,初学使用时会感觉非常麻烦,很多地方都需要考虑拆包,而且在实际编程中发现强制拆包虽然方便,但是会造成很多未知的不可控问题,很多时候往往需要用if let语句进行拆包,感觉反而使代码变得很冗余,但是随着深入的使用,发现swift的optional类型其实在很多场景都提供了良好的链式编程环境,反而使代码写起来更加流畅,且阅读代码更加容易。

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

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,305评论 4 61
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,281评论 30 472
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,317评论 6 13
  • 参考:OClint安装和使用和OClint手册
    夏天的风_song阅读 288评论 0 0
  • 夏日和朋友一起去白洋淀,一起官荷、赏荷、采荷,不仅乐趣多多收获多多,也深有体会——"行万里路就是读万卷书"。今日坐...
    静夜秋思阅读 883评论 0 50