2015-02-09 39 views

回答

1

您可以声明一个符合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 

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

4

这可以使用泛型来完成和“在哪里”关键字

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

func printEnum<T: RawRepresentable where T.RawValue == String>(arg: T) { 
    print(arg.rawValue) 
} 
printEnum(EnumString.A) //Prints "test" 
相关问题