美文网首页Swift进阶之路ios专题Swift
Swift中协议的可选方法的实现判断

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

作者: soulyqc | 来源:发表于2016-09-06 20:32 被阅读2611次

      在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类型其实在很多场景都提供了良好的链式编程环境,反而使代码写起来更加流畅,且阅读代码更加容易。

    相关文章

      网友评论

      • 雅之上善若水:谢谢啦,这个确实帮入门的我,解决了一个问题
      • 863c73f31933:楼上你好,要是我想在class AppDelegate: UIResponder, UIApplicationDelegate,UITableViewDelegate 里面的UITableViewDelegate根据iOS系统来判断这个类是否添加这个协议,这个可以做到嘛?

      本文标题:Swift中协议的可选方法的实现判断

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