Каков наилучший способ обработки init
, который может завершиться ошибкой в Swift
? Например, вы создаете экземпляр класса, который зависит от определенного ресурса, который может быть недоступен.Ошибки в инициализаторах Swift
Видимо у нас есть 2 варианта:
- подлежащий передаче на поруки инициализации, который возвращает ноль (какао способ)
- инициализации, который выдает ошибку
Ниже
enum ThingError: ErrorType{
case crap
}
class Thing {
init(c: Int) throws{
if c < 0 {
throw ThingError.crap
}
}
}
var c = try Thing(c: 3)
do{
var d = try Thing(c: -4)
}catch{
print("oh vey!")
}
Есть ли рекомендуемый способ сделать это? Второй вариант выглядит более «Swifty» ...
«Сколько раз вы сталкиваетесь с init, который может терпеть неудачу несколькими способами» Все время @Grimxn. Я думал о 'initWithContentsOfURL: encoding: error:' мгновенно, и есть много и много других. Именно поэтому в Objective-C такие методы имеют параметр «error:». Этот параметр говорит вам, что мы не смогли. – matt
", что большинство inits терпят неудачу в ноль или один путь, а одиночные отказы должны использовать failable ..." И это, @Grimxn, я считаю, это то, что мой ответ сказал _, нет? – matt
Вы правы - я ничего здесь не добавляю, кроме как документируя свое собственное медленное понимание. Добавьте свои комментарии к ответам, и я удалю свои комментарии. – Grimxn