在Swift语言中添加associatedtype
的目的是什么?为什么我们不能在协议中使用泛型呢?
当前语法如下:
protocol Container {
associatedtype Item
mutating func append(_ item: Item)
var count: Int { get }
subscript(i: Int) -> Item { get }
}
在这种情况下,为什么Apple不能只使用Generics。会导致类似的情况:
protocol Container<Item> {
mutating func append(_ item: Item)
var count: Int { get }
subscript(i: Int) -> Item { get }
}
在这种情况下,我们将能够使用一种通用协议来具有属性。现在,如果您尝试使用带有associatedtype
作为属性的协议,则会得到以下编译时异常:
协议“容器”只能用作一般约束 因为它具有“自我”或相关类型要求