Автоматически присваивать значение объекту на основе Enum Swift - PullRequest
0 голосов
/ 30 мая 2018

поэтому у меня есть этот объект

class StationDetailsDTO: Object, Mappable {
    @objc dynamic var stateID = 0
    @objc dynamic var stateName = String()
}

Этот объект будет назначен из объекта ответа API.

Теперь проблема в том, что API просто вернет stateID, без stateName.

Итак, чего я хочу добиться, так это какого-нибудь возможного способа автоматического назначения stateName на основе созданного самим Enum?

Потому что сейчас я использую обычную проверку if-else

If stateID == 0 {
 stateName = "A" 
}
else if stateID == 1 {
 stateName = "B"
}

Я чувствую, что это не лучший подход для реализации.Я думаю об использовании Enum.Я уже создал Enum

enum State: String {
    case A 
    case B
    case C
}

. Я думаю использовать случай A (значение), но не совсем уверен, как его реализовать.

Кто-нибудь может подсказать мне, как этого добиться?Или есть какой-то другой лучший подход, который я мог бы использовать?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Я не думаю, что было бы хорошей идеей создавать перечисление, если вы собираетесь использовать его только один раз, вместо этого вы можете использовать частную функцию с помощью оператора switch во время инициализации:

class StationDetailsDTO {

     private(set) var stateId: Int = 0
     private(set) var stateName: String = ""

     init(stateId: Int) {
         self.stateId = stateId
         self.stateName = initializeStateName()
     }

    private func initializeStateName() -> String {
        switch (self.stateId) {
            case 0: return "A"
            case 1: return "B"
            case 2: return "C"
            default : return ""
        }
    }
}

var test = StationDetailsDTO(stateId: 0)
print(test.stateName) // prints A
0 голосов
/ 30 мая 2018

Попробуйте didSet и создайте массив возможных значений

@objc dynamic var stateID = 0
{
    didSet {

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