Swift 2:在闭包中捕获错误

时间:2015-07-17 05:41:57

标签: swift closures try-catch

我有以下代码,它使用闭包来懒惰地初始化属性:

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    do {
        try coordinator.addPersistentStoreWithType(NSInMemoryStoreType, configuration: nil, URL: nil, options: nil)
    } catch let err as NSError {
        XCTFail("error creating store: \(err)")
    }
    return coordinator

}()

写入的代码会产生错误:

  

通话可以抛出,但没有标记为'尝试'并且没有处理错误

代码标有'尝试'并处理错误。当我将闭包移动到一个单独的函数并在此处调用它时,一切都按预期工作。

关于闭包和do / try / catch有什么我不明白的,或者我在精彩的Swift 2编译器中遇到过(还有另一个!)错误?

1 个答案:

答案 0 :(得分:2)

问题是你的catch没有捕获所有可能的异常,所以关闭仍然可以抛出。使用通用catch:

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel:  self.managedObjectModel)
    do {
        try coordinator.addPersistentStoreWithType(NSInMemoryStoreType, configuration: nil, URL: nil, options: nil)
    } catch {
        XCTFail("error creating store: \(error)")
    }
    return coordinator
}()