3

我有一个代码,我想在其中设置 key 的值,如下所示:

item.setValue(field.1, forKey: field.0)

如果 NSUnknownKeyException 被抛出,我想捕捉,但我有以下代码但它不工作:

 do {
     try item.setValue(field.1, forKey: field.0)
 } catch _ {
     print("Trying to set wrong value for the item ")
 }

当它是无效密钥时显示的错误如下:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: setValue:forUndefinedKey:

我怎样才能捕捉到这个异常?

任何帮助将不胜感激。

4

2 回答 2

4

你不能在 Swift 中做到这一点。

不要混淆错误和异常:

  • Swift 中的错误想法是提前退出当前范围。

  • Cocoa 中的一个例外的想法是你已经死在水里了。你不应该允许这种情况发生。

现在,Cocoa 有时会抛出异常并自己捕获它,这确实发生了。但是现在官方不鼓励这种行为,而且这不是你可以在 Swift 中做的事情。如果你发送到的类是你的,你可以随意实现setValue:forUndefinedKey:,但如果一个未捕获的 NSException 发生,那就是游戏的结束——Swift 无法捕获它。

于 2016-05-28T18:29:09.513 回答
0

您可以使用围绕 Objective-C 的 Swift 包装器捕获异常,@try/@catch例如https://github.com/williamFalcon/SwiftTryCatch

您的情况的用法是:

SwiftTryCatch.try({ 
    item.setValue(field.1, forKey: field.0)

}, catch: { (exception) in
    print("Trying to set wrong value for the item ")

}, finally: {

})
于 2017-09-01T05:03:24.727 回答