如何在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类型的协议)

你可能感兴趣的:(如何在Swfit中定义可选方法)