Я хотел сделать перечисление с типом Contacts
framework CNLabeledValue
* CNPhoneNumber
, которые определены как:
// Generic labels
CONTACTS_EXTERN NSString * const CNLabelHome NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelWork NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelSchool NS_AVAILABLE(10_15, 13_0);
CONTACTS_EXTERN NSString * const CNLabelOther NS_AVAILABLE(10_11, 9_0);
Я сделал что-то вроде этого:
enum CNLabeledValueType: String {
case home
case work
case school
case other
var rawValue: String {
switch self {
case .home:
return CNLabelHome
case .work:
return CNLabelHome
case .school:
return CNLabelSchool
default:
return CNLabelOther
}
}
}
Но я думаю, что мне все еще нужно сделать какое-нибудь отображение перечисления на правильные строки времени выполнения, нужно ли мне как-то также переопределить инициализацию перечисления?
То, чего я хотел бы достичь, было бы таким же результат, как если бы это было возможно:
enum CNLabeledValueType: String {
case home = CNLabelHome
case work = CNLabelWork
case school = CNLabelSchool
case other = CNLabelOther
}
Но это невозможно, потому что перечисления Swift требуют, чтобы «необработанное значение для перечисления должно быть строковым литералом», как жалуется компилятор. Так есть ли способ сделать что-то похожее, используя вычисляемые свойства, чтобы можно было переключаться по строке случая, а также получать правильное вычисленное значение строки во время выполнения для каждого случая?