2016-12-12 2 views
0

Мы используем перечисления для некоторых основных структур данных, как это:Swift перечисления: Получение значение перечисления для строки перечисления из Int значения

enum Industry: String { 
    case Industry1 = "Industry 1", Industry2 = "Industry 2", Industry3 = "Industry 3" 

    static let allValues = [Industry1, Industry2, Industry3] 
} 

Когда мы сохраняем значение в нашей базе данных мы сохраняем их как INTS/номер. Так, например, значение для промышленности может составлять 2, что будет Industry2.

Как сопоставить значение 2, вернуться к соответствующему элементу в перечислении? Итак, я могу вернуть значение строки обратно?

ответ

0

на основе вашей установки вы можете сделать:

let n = 2 
let stringValue = Industry.allValues[n - 1].rawValue 
+0

Вы правы, не думали об использовании массива allValues, но имеют смысл – StuartM

1

Промышленность не представлено лучшим образом. Вы должны упаковать название отрасли и код вместе в лучшей структуру, как это:

struct Industry { 
    var name: String 
    var code: Int 
} 

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

Теперь, если у вас есть, чтобы сохранить вы можете industry.code

И если вы хотите, чтобы отобразить industry.name

+1

Почему 'T!'? Это просто плохая практика, чтобы поставить '!' Всюду в коде Swift. – user28434

3

Вы можете сделать это, чтобы иметь произвольное названия отраслей:

enum Industry: Int { 
    case Industry1 = 1, Industry2, Industry3 

    static let allValues = [Industry1, Industry2, Industry3] 

    func industryName() -> String { 
     switch self { 
     case .Industry1: return "Industry A" 
     case .Industry2: return "Industry B" 
     case .Industry3: return "Industry C" 
     } 
    } 
} 

Оценка: e использования:

let industry = Industry(rawValue: 2) 
industry?.industryName() // prints "Industry B" 
+0

Это хороший наводящий на размышления способ заполнить это. Я принял ответ, который работает с текущей настройкой, и это не слишком отличается, возможно, лучший подход к раскладке +1 – StuartM