我有一个类型为Any?
的变量。我完全知道该变量是enum: String
类型。我如何获得rawValue像这样:
var somevar: Any? = someValue
(somevar as ?????).rawValue
答案 0 :(得分:1)
首先,对不起,我误解了您的问题。
是的,而且非常容易
这是迅捷之美
您必须在此处添加一些额外的步骤
第1步:
添加协议
protocol TestMe {
var rawValueDesc: String {get}
}
第2步:
在您的枚举中实现
enum YourEnum:String,TestMe {
case one = "test"
case two = "test1"
var rawValueDesc: String {
return self.rawValue
}
}
最后
var testdd:Any = YourEnum.one
if let finalValue = testdd as? TestMe {
print( finalValue.rawValueDesc)
}
希望对您有帮助
答案 1 :(得分:0)
假设已在您或导入的模块中的某处定义了此
:enum First: String {
case a, b
}
enum Second: String {
case c, d
}
在您的模块中,您应该执行以下操作:
protocol StringRawRepresentable {
var rawValue: String { get }
}
extension First: StringRawRepresentable {}
extension Second: StringRawRepresentable {}
这是你的问题:
var somevar: Any? = someValue
let result = (somevar as? StringRawRepresentable)?.rawValue
例如,如果someValue == Second.c
您将在"c"
中得到result
。
此方法将起作用,但是您必须extend
所有可能的类型,否则即使类型具有as?
属性,nil
的转换也将导致rawValue: String
。 / p>