如何在Swfit中定义可选方法

如何在Swfit中定义可选方法


可选方法的声明

Swfit中的所定义的协议,一旦遵守必须实现所有协议方法,如果做到OC一样定义可选方法呢?

  • 声明协议时前面加上@objc,表示这是一个OC类型的协议,这个协议可以只能被OC的类所遵守,OC类型的协议所继承

  • 另外,可选方法前像OC一样加上optinal即可

    /*
    注意,@objc
    */
    @objc protocol KLXMultiDropDownMenuDelegate: NSObjectProtocol {
        // 每次展开/收起之前调用,通过multiDropDownMenu.bounds.height获取展开/收起后的高度
        /*
        注意optional修饰
       */
        optional func multiDropDownMenuWillChangeBounds(multiDropDownMenu: KLXMultiDropDownMenu)
    }
    

执行可选方法

  • 执行可选方法前,要向OC一样对其进行判断方法就是函数指针,判断其是否为nil即可

    /*
    如果代理实现了可选方法(方法不为nil),就执行
    */
    if self.delegate?.multiDropDownMenuWillChangeBounds != nil {
        self.delegate?.multiDropDownMenuWillChangeBounds!(self)
     }
    

总结

  • 对于Swift类型的协议,其所有方法都是必选方法,一旦遵守必须实现
  • @objc修饰的协议是OC类型的协议,可以定义可选方法(PS:UIKit / Foundation框架内的协议都是OC类型的协议)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,876评论 0 9
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,465评论 1 10
  • 132.转换错误成可选值 通过转换错误成一个可选值,你可以使用 try? 来处理错误。当执行try?表达式时,如果...
    无沣阅读 5,130评论 0 3
  • Mirror,mirror, how can you know everything when you know ...
    皮皮络阅读 1,540评论 0 2
  • 最近在工作上越来越能品出点门道出来了,感觉自己好像终于要把这个平台期熬到头啦。 知道了,不要看轻自己。你的短板可能...
    有鱼上上签阅读 1,441评论 1 1

友情链接更多精彩内容