У меня есть ситуация, когда я пытаюсь выполнить двоичное декодирование некоторых данных, а типы данных имеют как числовое значение, так и строковое значение и имя. Я думал об использовании перечисления, например:
enum TARGET_TRACK_TYPE : String {
case TT_INVALID = "Invalid"
case TT_TRUE_TRACK_ANGLE = "True Track Angle"
case TT_MAGNETIC = "Magnetic"
case TT_TRUE = "True"
}
Однако я также знаю, что:
TT_INVALID = 0
и TT_TRUE_TRACK_ANGLE = 1
и т.д. Есть ли простой способ инкапсулировать обе эти "вещи" строку и числовое значение в конструкцию enum или мне нужно сделать какой-то тип struct/class для обработки этого
Думаю, я хотел бы сделать что-то вроде
let a = TARGET_TRACK_TYPE.rawValue(value: 2)
println(a)
который печатает True Track Angle
Опять же, я знаю, что это можно сделать с помощью структуры или класса, но меня особенно интересует перечисление
Или для другого примера:
/// Emitter Category is defined in section 3.5.1.10 of the GDL90 Spec
struct EmitterCategory {
let category : Int
func getString() -> String {
switch(category) {
case 0:
return "No aircraft type information";
case 1:
return "Light";
case 2:
return "Smalle";
case 3:
return "Large";
case 4:
return "High Vortex Large";
case 5:
return "Heavy";
case 6:
return "Highly Manuverable";
case 7:
return "Rotorcraft";
case 8:
return "(Unassigned)";
case 9:
return "Glider/sailplane";
case 10:
return "Ligther than air";
case 11:
return "Parachutist/sky diver";
case 12:
return "Ultra light/hang glider/paraglider";
case 13:
return "(Unassigned)";
case 14:
return "Unmanned aerial vehicle";
case 15:
return "Space/transatmospheric vehicle";
case 16:
return "(Unassigned)";
case 17:
return "Surface vehicle - emergency vehicle";
case 18:
return "Surface vehicle - service vehicle";
case 19:
return "Point obstacle";
case 20:
return "Cluster Obstacle";
case 21:
return "Line Obstacle";
default:
return "(reserved)";
}
}
}
Есть ли способ реорганизовать эту структуру в enum, чтобы я построил перечисление с целым значением, но я "прочитал" перечисление как строку? Я уверен, что ответа нет.