我有以下代码,它使用闭包来懒惰地初始化属性:
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编译器中遇到过(还有另一个!)错误?
答案 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
}()