Можно ли получить Enum Type из String в Swift? - PullRequest
0 голосов
/ 27 февраля 2019

Можно ли получить Enum Тип от String?

ex: let type1 = WSCLogin.self <-- OK
ex: let type2 = someFunction(typeString: "WSCLogin") -> WSCLogin.Type <-- issue

Я могу сохранить "WSCLogin" как строку где-нибудь, и письмо, которое я хочу использовать эту строку ("WSCLogin") дляреализовать WSCLogin.Type.
Возможно ли это?
Кто-то, кто может выяснить, someFunction(typeString: "WSCLogin") -> WSCLogin.Type функция?
спасибо

enum WSCLogin: String {
    case mail
    case password
}

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019
// the type without a String
let type1 = WSCLogin.self

// the type with a String, without extension
let mail = WSCLogin(rawValue: "mail")
let type2 = type(of: mail)

// the type with a String, with extension
extension WSCLogin {
    var kind: WSCLogin.Type {
        return type(of: self)
    }
}
let type3 = WSCLogin(rawValue: "mail")?.kind

Поскольку мы инициализируем WSCLogin через инициализатор RawRepresentable, мы всегда получаем тип Optional.Вам просто нужно сначала развернуть.

Обратите внимание, что вы не можете использовать type или Type в качестве имени свойства, поскольку в обоих случаях вы столкнетесь с конфликтами имен.С помощью обратных галочек, таких как

var `type`: WSCLogin.Type

, вы можете принудительно назначить именование, но в этом случае вы переопределяете функцию type(), которую вы используете в этом вычисляемом свойстве.

0 голосов
/ 27 февраля 2019

Вы можете использовать следующий конструктор перечисления:

let x: WSCLogin? = WSCLogin(rawValue: String)

Это предоставит необязательную переменную со значением, если строка является допустимым необработанным значением, или nil, если rawValue недопустимо

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