Как я могу получить rawValue из enum, если элемент Any? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть переменная типа Any?.Я полностью знаю, что это за переменная типа enum: String.Как я могу получить rawValue что-то вроде:

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

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Прежде всего, извините, я неправильно понял ваш вопрос.

Да, это возможно и очень легко

это красота быстро

У вас естьдобавить туда дополнительный шаг

Шаг 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)
    }

Надеюсь, это будет полезно для вас

0 голосов
/ 05 декабря 2018

Предполагая, что это определено где-то в вашем или в импортированном модуле:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...