iOS 问答集合收藏swift

Swift 如何优雅的实现协议的可选方法

2018-07-13  本文已影响24人  船长_

原生的 Swift protocol 里没有可选项,所有定义的方法都是必须实现的。

给自定义的协议中添加extension,在extension中对可选方法进行默认实现,这样遵守协议的对象就可以不用实现可选方法.
代码示例:

protocol OptionalProtocol {
    func optionalMethod()        // 可选
    func necessaryMethod()       // 必须
    func anotherOptionalMethod() // 可选
}

extension OptionalProtocol {
    func optionalMethod() {
        print("Implemented in extension")
    }

    func anotherOptionalMethod() {
        print("Implemented in extension")
    }
}

class MyClass: OptionalProtocol {
    func necessaryMethod() {
        print("Implemented in Class3")
    }

    func optionalMethod() {
        print("Implemented in Class3")
    }
}

let obj = MyClass()
obj.necessaryMethod() // Implemented in Class3
obj.optionalMethod()  // Implemented in Class3
obj.anotherOptionalMethod() // Implemented in extension

注意:

如果考虑到SwiftObjective-C混编,或者,所写的协议要支持Objective-C(可能是用Swift写的一个开源组件,同时支持Objective-C),那么Objective-C代码中的对象想要遵守Swift中自定义的协议,那么使用@objc关键字实现协议的可选方法是更好的选择

参考:Swift必备tips-王巍

上一篇下一篇

猜你喜欢

热点阅读