Предполагая, что это определено где-то в вашем или в импортированном модуле:
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
.