在Swift 2.0中,do {} catch不会处理从这里抛出的错误

Var*_*kul 28 xcode ios swift

在我更新swift 2.0之后,我遇到了一个错误,就像下面的图片一样{try} catch.

在此输入图像描述

我怎样才能解决这个问题?谢谢!

Ron*_*tin 76

错误告诉您封闭的捕获并非详尽无遗.这是因为自动生成的catch块只捕获NSError对象,编译器无法判断是否ErrorType会抛出其他对象.

如果您确定不会抛出其他错误,则可以添加另一个默认catch块:

do {
    objects = try managedObjectContext?.executeFetchRequest(request)
} catch let error1 as NSError {
    error = error1
    objects = nil
} catch {
    // Catch any other errors 
}
Run Code Online (Sandbox Code Playgroud)


Him*_*jan 10

除了处理您知道函数可以抛出的错误类型之外,还需要使用通用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)")
   }
Run Code Online (Sandbox Code Playgroud)

错误处理代码是:

    do{
        try printSmallNumber(67)
    }catch InvalidNumberError.even{
        print("Number is Even")
    }catch InvalidNumberError.tooBig{
        print("Number is greater tha 100")
    }catch{
        print("some error")
    }
Run Code Online (Sandbox Code Playgroud)

最后一个catch块是处理未知错误.

干杯!

  • 有没有办法限制你的func抛出的可能错误?func printSmallNumber(x:Int)抛出InvalidNumberError?如果可能的话会很甜蜜. (7认同)