在斯威夫特,你不能在協議定義本身定義的功能或屬性的默認實現,即:爲什麼必須通過Swift中的擴展實現協議默認值?
protocol Container {
//These are fine
associatedtype Item
mutating func append(_ item: Item)
var count: Int { get set }
subscript(i: Int) -> Item { get }
//These are not fine
var defaultValue: Int = 10
mutating func messWithCount(){
self.count *= 10
}
}
extension Container {
//This is fine though
mutating func messWithCount(){
self.count *= 10
}
}
但是你可以通過擴展這樣做(儘管擴展不支持存儲性能,它們支持的功能和計算的 - 雖然存儲的財產問題可以是worked around)。
這背後的解釋是什麼?作爲補充,optional func
的解釋只有在我們將Protocol和func都標記爲@objc
並因此使其不可用於Structs/Enums(基於Value而不是基於引用)時纔可實現?
編輯:添加在擴展示例
有沒有真正的理由在協議聲明的默認實現AREN不可能;差別僅僅是語法。因此,我認爲這不是執行的重中之重(如果有的話)。它[包含在泛型聲明中](https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#default-implementations-in-protocols-),所以可能會被認爲是該語言的更高版本。 – Hamish