【问题标题】: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,因为我认为它是您自己的自定义协议之一,可以轻松换出,但相同的逻辑仍然适用于任何协议。

    【讨论】:

    • @Andrea 不用担心 - 泛型很难,坚持下去
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多