如何创建接受泛型类型作为关联类型的枚举
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
,因为我认为这是您自己的自定义协议之一,可以轻松换出,但相同的逻辑仍然适用于任何协议。
我正在尝试创建一个接受泛型类型作为关联值的枚举。
编译器抱怨:
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
,因为我认为这是您自己的自定义协议之一,可以轻松换出,但相同的逻辑仍然适用于任何协议。