Ошибки, отброшенные отсюда, не обрабатываются для {} 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 предназначен для обработки неизвестной ошибки.

Ура!