@optional 和 @required 是 Objective-C 中特有的關(guān)鍵字。
Swift中,默認(rèn)所有方法在協(xié)議中都是必須實現(xiàn)的。而且,協(xié)議里方法不可以直接定義 optional。先給出兩種解決方案:
- 在協(xié)議和方法前都加上
@objc關(guān)鍵字,然后再在方法前加上optional關(guān)鍵字。該方法實際上是把協(xié)議轉(zhuǎn)化為Objective-C的方式然后進(jìn)行可選定義。示例如下:
@objc protocol SomeProtocol {
func requiredFunc()
@objc optional func optionalFunc()
}
- 用擴(kuò)展(extension)來規(guī)定可選方法。Swift中,協(xié)議擴(kuò)展(protocol extension)可以定義部分方法的默認(rèn)實現(xiàn),這樣這些方法在實際調(diào)用中就是可選實現(xiàn)的了。示例如下:
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”)
}
}