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

时间:2015-11-02 11:20:32

标签: ios swift generics swift2 xcode7

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

  

参考泛型类型' GenericItem'需要< ...>中的参数   

该计划非常简单:

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

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

我无法理解如何使这成为可能。

1 个答案:

答案 0 :(得分: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,因为我认为它是您自己的自定义协议之一,可以轻松换出,但相同的逻辑仍适用于任何协议。