是否可以为特定类型的枚举声明swift泛型?

mog*_*777 5 swift

是否有可能有一个函数允许rawValue属于某种类型的任何枚举?例如,任何具有字符串rawValue的枚举.

Jer*_*kin 9

这可以使用泛型和"where"关键字来完成

enum EnumString: String {
    case A = "test"
}

func printEnum<T: RawRepresentable where T.RawValue == String>(arg: T) {
    print(arg.rawValue)
}
printEnum(EnumString.A) //Prints "test"
Run Code Online (Sandbox Code Playgroud)


kel*_*ket 3

您可以声明一个符合 type 的泛型RawRepresentable,该协议是所有声明原始 rawValue 的枚举都遵循的协议。

enum EnumA: Int {
    case A = 0
}

enum EnumB {
    case A
}

func doGenericSomething<T: RawRepresentable>(arg: T) {
    println(arg.rawValue)
}

doGenericSomething(EnumA.A) //OK
doGenericSomething(EnumB.A) //Error! Does not conform to protocol RawRepresentable
Run Code Online (Sandbox Code Playgroud)

但是,您不能在泛型中指定枚举的 rawValue 类型。有关信息,您可以查看此处的帖子。