Редактироватьделегат не-failable инициализатор к failable инициализатора
Простое решение было найдено благодаря @Airspeed скорости, с небольшим количеством добавленного крутки, так как это анализируется с JSON. Разрешить инициализатор принимать AnyObject?
и по умолчанию для Unknown
(или Invalid
):
init(value: AnyObject?) {
if let value = value as? Int
,let result = Result(rawValue: value) {
self = result
} else {
self = .Unknown
}
}
//
Оригинал
Я осуществил перечисление с Unknown
случае:
enum Result: Int {
case Success
case Failure
case Foo
case Bar
case FooBar
case FooFoo
...
case Unknown = -1
}
Я хочу создать другой инициализатор, который принимает п Int
и возвращает Unknown
для случая не распознается перечислимого:
init(value: Int) {
self.init(rawValue: value)
if self == nil { // Complication Error
self = .Unknown
}
}
Мое решение в настоящее время является метод фабрики, однако инициализатор будет гораздо чище:
static func resultWithValue(value: Int) -> Result {
if let result = self(rawValue: value) {
return result
}
return .Unknown
}
Спасибо! Я смущен, я не думал использовать имя типа в инициализаторе. – Yariv