Есть ли способ определить перечисление, когда инициализируется с rawValue
, по умолчанию будет использоваться какое-то значение вместо отказа? Полезно в случаях, когда это значение может быть неожиданным (например, ошибки API-интерфейса сервера)Неудачный инициализатор enum со значением по умолчанию
ответ
Вы имеете в виду что-то подобное?
enum ErrorCode: Int {
case NoErr = 0, Err1, Err2, LastErr, DefaultErr
init(value: Int) {
if (value > LastErr.rawValue) {
self = .DefaultErr
} else {
self = ErrorCode(rawValue: value)!
}
}
}
let error: ErrorCode = .LastErr
let anotherError: ErrorCode = ErrorCode(value: 99)
Вот еще один вариант:
enum ErrorCode: Int {
case NoErr = 0, Err1, Err2, LastErr
init?(value: Int) {
if (value > 3) {
return nil
} else {
self = ErrorCode(rawValue: value)!
}
}
}
let error: ErrorCode = .LastErr
let anotherError: ErrorCode? = ErrorCode(value: 99)
что эквивалентно:
enum ErrorCode: Int {
case NoErr = 0, Err1, Err2, LastErr
}
let anotherError: ErrorCode? = ErrorCode(rawValue: 99)
, потому что, как Apple, док является указанием:
ПРИМЕЧАНИЕ
Инициализатор необработанного значения является инициализатором с ошибкой, поскольку не каждое исходное значение возвращает элемент перечисления. Для получения дополнительной информации см. Неудачные инициализаторы.
Но в общем случае, если вы хотите использовать перечисление с необработанным значением, вы должны ожидать опцию и обрабатывать возвращаемое значение nil в качестве ошибки по умолчанию вне определения перечисления. Это была бы моя рекомендация.
Да, вероятно, лучше ожидать нулевого значения, но я выбрал ваше решение для удобства – Morrowless
- 1. Enum со связанным значением по умолчанию типа
- 2. DropDownListFor из Enum со значением по умолчанию, используя ViewModel
- 3. Как создать enum со значением по умолчанию в postgres
- 4. Protobuf: перечисление со значением по умолчанию
- 5. EditText со значением по умолчанию
- 6. TextBox со значением по умолчанию
- 7. Какова цель init! неудачный инициализатор?
- 8. Автофокусировка по полям со значением по умолчанию
- 9. Swift generics со значением по умолчанию
- 10. Неудачный инициализатор в Xcode 6.1
- 11. Переклассифицированный класс со значением по умолчанию
- 12. solr dataImportHandler выражение со значением по умолчанию
- 13. Scala конструктор со значением по умолчанию
- 14. Запрос Sql со значением по умолчанию
- 15. Объявляет функцию со значением указателя по умолчанию
- 16. Невозможно заменить строку со значением по умолчанию
- 17. Комбинированные переменные Blade со значением по умолчанию
- 18. получить параметр функции со значением по умолчанию
- 19. создание таблицы со значением по умолчанию
- 20. Часть текстового поля со значением по умолчанию
- 21. Проверка Javascript со значением по умолчанию
- 22. Scala - Карта со значением по умолчанию Нет?
- 23. Masked Input Plugin со значением по умолчанию
- 24. Wicket TextField со значением по умолчанию
- 25. параметр со значением объекта по умолчанию
- 26. Параметрирование Spring @Scheduled со значением по умолчанию
- 27. Добавление столбца со значением по умолчанию?
- 28. автоматического свойства со значением по умолчанию
- 29. Инициализировать массив со значением по умолчанию
- 30. Как установить переключатель по умолчанию со значением?
Не можете ли вы просто переопределить этот 'init', который принимает аргумент' rawValue' ...? И 'return super.init (rawValue: rawValue) ?? yourDefaultValue'? – nhgrif
... но если значение может быть неожиданным, «перечисление» может быть неправильным проспектом ... или неудача может быть тем, что вы хотите ... – nhgrif