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