如果我们已经有了泛型,为什么在Swift中需要“ associatedtype”?

时间:2019-10-20 21:56:50

标签: swift generics associated-types

在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作为属性的协议,则会得到以下编译时异常:

  

协议“容器”只能用作一般约束   因为它具有“自我”或相关类型要求

0 个答案:

没有答案