什么类型的字符串枚举,所以它可以用作参数?

Tru*_*an1 0 enums swift

在我当前的实现中,我使用rawValue这样的方式将字符串枚举传递给函数:

enum Compass: String {
  case North, South, East, West
}

func something(key: String) {...}

something(Compass.East.rawValue)
Run Code Online (Sandbox Code Playgroud)

除了String功能之外是否有其他类型,所以我可以做这样的事情?

something(Compass.East)
Run Code Online (Sandbox Code Playgroud)

我不想制作key类型的参数Compass,因为我enums来自各个地方,但都继承自String.

我试过这样做,但收到了一个错误:

func something(key:StringLiteralConvertible){...} //错误:协议'StringLiteralConvertible'只能用作通用约束

有没有我可以使用的类型,所以我不必rawValue每次都使用.

Kam*_*xom 7

你可以这样做:

func something<T: RawRepresentable where T.RawValue == String>(key: T) {
    let string = key.rawValue
}

something(Compass.East)
Run Code Online (Sandbox Code Playgroud)

这允许您传入任何以Strings作为其值的枚举