美文网首页iOS 问答集合收藏swift
Swift 如何优雅的实现协议的可选方法

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

作者: 船长_ | 来源:发表于2018-07-13 19:49 被阅读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-王巍

相关文章

网友评论

  • CoderHG:那么问题来了:UITableViewDataSource 是怎么实现的可选,还发现如果按照UITableViewDataSource的套路来实现的话,直接报错了。楼主有研究么?
    船长_:点进去可以看到声明,至于为啥按照套路会报错,我也没研究

本文标题:Swift 如何优雅的实现协议的可选方法

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