【问题标题】:How to create an enumeration that accepts a generic type as associated type如何创建一个接受泛型类型作为关联类型的枚举
【发布时间】:2015-11-02 11:20:32
【问题描述】:
我正在尝试创建一个接受泛型类型作为关联值的枚举。
编译器抱怨:
对泛型类型“GenericItem”的引用需要 <...> 中的参数
方案很简单:
struct GenericItem <Item:FormattableAsStringWithPrecision> {
let value: Item
}
enum Enumeration {
case Generic(values: [GenericItem])
}
我不明白如何做到这一点。
【问题讨论】:
标签:
ios
swift
generics
swift2
xcode7
【解决方案1】:
您还需要将通用类型添加到枚举中,类型可以从初始化程序中推断出来,因此您不需要将其作为通用类型参数传递。
下面是一个示例,说明您可以如何做到这一点。
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,因为我认为它是您自己的自定义协议之一,可以轻松换出,但相同的逻辑仍然适用于任何协议。