如何创建接受泛型类型作为关联类型的枚举

How to create an enumeration that accepts a generic type as associated type

我正在尝试创建一个接受泛型类型作为关联值的枚举。
编译器抱怨:

Reference to generic type 'GenericItem' requires arguments in <...>

方案很简单:

struct GenericItem <Item:FormattableAsStringWithPrecision> {
    let value: Item
}

enum Enumeration {
    case Generic(values: [GenericItem])
}

我不明白如何做到这一点。

您还需要将泛型类型添加到枚举中,类型可以从初始化程序中推断出来,因此您不需要将其作为泛型类型参数传递。

下面是您可以如何操作的示例。

struct GenericItem<T: CustomDebugStringConvertible> {
  let value: T
}

enum Enumeration<T: CustomDebugStringConvertible> {
  case Generic(value: [GenericItem<T>])
}

let someValue = Enumeration.Generic(value: [ GenericItem(value: "") ])

编辑:我将 FormattableAsStringWithPrecision 更改为 CustomDebugStringConvertible,因为我认为这是您自己的自定义协议之一,可以轻松换出,但相同的逻辑仍然适用于任何协议。