Swift - получает регистр и значение в перечислении с параметрами - PullRequest
0 голосов
/ 05 июля 2018

У меня есть enum

public enum Format {
    case label(key: String)
    case textField(key: String)
    case image(key: String)
}

И я могу использовать это как:

Format.label(key: "abc")

Format.textField(key: "0.0")

Format.image(key: "mystringfile")

Когда я пытаюсь получить значение, я могу сделать это с помощью:

let control = Format.label(key: "abc")
if case let Format.label(key) = control {
    tmp = key
} else if case let Format.image(key) = control {
    tmp = key
} else if case let Format.textField(key) = control {
    tmp = key
}

С этим я могу получить значение, но я не нахожу регистр label, textfield или image.

Как мне найти перечисление, которое принадлежит этой переменной?

Если я попытаюсь использовать что-то вроде этого: control == Format.label

Я получаю ошибку:

Двоичный оператор '==' нельзя применять к операндам типа 'Table.Format' и '(String) -> Format'

1 Ответ

0 голосов
/ 05 июля 2018

Я могу неправильно понять ваш вопрос, но почему бы не использовать switch?

let control = Format.label(key: "abc") // or = Format.textField(key: "whatever") or = Format.image(key: "whatever")

let tmp: String
switch control {
case .label(let key):
    // It's a label, do what you need
    tmp = key
case .textField(let key):
    // It's a textField, do what you need
    tmp = key
case .image(let key):
    // It's a image, do what you need
    tmp = key
}

Это позволяет вам воздействовать на тип и получать значение.

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