字符串枚举是什么类型,因此可以用作参数



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

enum Compass: String {
  case North, South, East, West
}
func something(key: String) {...}
something(Compass.East.rawValue)
除了

函数的String之外,还有其他类型,所以我可以做这样的事情吗?

something(Compass.East)

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

我尝试这样做,但出现错误:

func something(key: StringLiteralConvertible) {...}错误:协议"字符串文字可转换"只能用作泛型约束

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

你可以这样做:

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

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

最新更新