在斯威夫特,你不能在协议定义本身定义的功能或属性的默认实现,即:为什么必须通过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