在 Swift 中将各种枚举大小写作为函数参数传递

Passing various enum case as function param in Swift

我有两个像这样的简单枚举:

    enum Bar:String {
        case obj1 = "Object1"
    }

    enum Foo:String {
        case obj2 = "Object2"
    }

我想编写一个将枚举大小写作为参数的函数,它应该打印大小写原始值。像这样:

printCase(Bar.obj1) // prints "Object1"
printCase(Foo.obj2) // prints "Object2"

我像 那样尝试过,但它将整个枚举作为参数。但我的情况与此不同。任何帮助,将不胜感激。

谢谢

您只需要定义一个通用函数,它接受 RawRepresentable 和 returns 其 rawValue 属性.

func rawValue<T: RawRepresentable>(of case: T) -> T.RawValue {
    `case`.rawValue
}

rawValue(of: Foo.obj2) // "Object2"
rawValue(of: Bar.obj1) // "Object1"

链接的问题实际上非常接近 - 您只需将参数类型更改为 T,而不是 T.Type:

func printCase<T : RawRepresentable>(_ e: T) where T.RawValue == String {
    print(e.rawValue)
}

因为您接受的是枚举实例,而不是枚举类型本身。

当然,您不必将其限制为枚举 where T.RawValue == String,因为 print 可以打印 Any 东西。