如果element为Any,如何从枚举中获取rawValue?

时间:2018-12-05 12:49:51

标签: ios swift enums

我有一个类型为Any?的变量。我完全知道该变量是enum: String类型。我如何获得rawValue像这样:

var somevar: Any? = someValue
(somevar as ?????).rawValue

2 个答案:

答案 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>