Ошибки, отброшенные отсюда, не обрабатываются для {} catch в Swift 2.0
После того, как я обновил swift 2.0, я получил ошибку, чтобы сделать {try} catch как изображение ниже.
![введите описание изображения здесь]()
Как я могу это исправить?
Спасибо!
Ответы
Ответ 1
Ошибка говорит вам, что закрывающий улов не является исчерпывающим. Это связано с тем, что автоматически сгенерированный блок catch
захватывает только объекты NSError
, и компилятор не может определить, будет ли вызываться какой-либо другой ErrorType
.
Если вы уверены, что никаких других ошибок не будет выброшено, вы можете добавить еще один блок catch по умолчанию:
do {
objects = try managedObjectContext?.executeFetchRequest(request)
} catch let error1 as NSError {
error = error1
objects = nil
} catch {
// Catch any other errors
}
Ответ 2
В дополнение к обработке типов ошибок, которые вы знаете о том, что ваша функция может бросать, вам необходимо обработать тип ошибки, который вы не знаете, с универсальными блоками catch. Просто используйте дополнительный блок catch и напечатайте пользователю некоторое обобщенное сообщение об ошибке.
См. мой код обработки ошибок. Здесь я создал функцию, которая будет печатать число, если оно нечетно и меньше 100.
Я справился с двумя типами ошибок: Even и tooBig, для этого я создал перечисление типа ErrorType.
enum InvalidNumberError : ErrorType{
case even
case tooBig
}
//MARK: this function will print a number if it is less than 100 and odd
func printSmallNumber(x :Int) throws{
if x % 2 == 0 {
throw InvalidNumberError.even
}
else if x > 100 {
throw InvalidNumberError.tooBig
}
print("number is \(x)")
}
Код обработки ошибок:
do{
try printSmallNumber(67)
}catch InvalidNumberError.even{
print("Number is Even")
}catch InvalidNumberError.tooBig{
print("Number is greater tha 100")
}catch{
print("some error")
}
Последний блок catch предназначен для обработки неизвестной ошибки.
Ура!