@optional 和 @required 是 Objective-C 中特有的关键字。
Swift中,默认所有方法在协议中都是必须实现的。而且,协议里方法不可以直接定义 optional
。先给出两种解决方案:
- 在协议和方法前都加上
@objc
关键字,然后再在方法前加上optional
关键字。该方法实际上是把协议转化为Objective-C的方式然后进行可选定义。示例如下:
@objc protocol SomeProtocol {
func requiredFunc()
@objc optional func optionalFunc()
}
- 用扩展(extension)来规定可选方法。Swift中,协议扩展(protocol extension)可以定义部分方法的默认实现,这样这些方法在实际调用中就是可选实现的了。示例如下:
protocol SomeProtocol {
func requiredFunc()
func optionalFunc()
}
extension SomeProtocol {
func optionalFunc() {
print(“Dumb Implementation”)
}
}
Class SomeClass: SomeProtocol {
func requiredFunc() {
print(“Only need to implement the required”)
}
}