在我当前的实现中,我使用rawValue
将字符串枚举传递给函数,如下所示:
enum Compass: String {
case North, South, East, West
}
func something(key: String) {...}
something(Compass.East.rawValue)
除了String
之外还有其他类型的函数,所以我可以这样做吗?
something(Compass.East)
我不想制作key
类型的Compass
参数,因为我enums
来自不同的地方,但都来自String
。
我尝试过这样做,但收到了错误:
func something(key:StringLiteralConvertible){...} //错误:协议' StringLiteralConvertible'只能用作通用约束
是否有我可以使用的类型,所以我不必每次都使用rawValue
。
答案 0 :(得分:7)
You can do this:
func something<T: RawRepresentable where T.RawValue == String>(key: T) {
let string = key.rawValue
}
something(Compass.East)
This lets you pass in any enum that has String
s as its values