在 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
东西。
我有两个像这样的简单枚举:
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
东西。