【发布时间】:2015-12-21 21:45:44
【问题描述】:
以下 Swift 代码引发 NSInvalidArgumentException 异常:
task = NSTask()
task.launchPath = "/SomeWrongPath"
task.launch()
如何捕捉异常?据我了解,Swift 中的 try/catch 是针对 Swift 中引发的错误,而不是针对从 NSTask 之类的对象引发的 NSExceptions(我猜它是用 ObjC 编写的)。我是 Swift 新手,所以我可能遗漏了一些明显的东西......
编辑:这是一个针对该错误的雷达(专门针对 NSTask):openradar.appspot.com/22837476
【问题讨论】:
-
不幸的是,您无法在 Swift 中捕获 Objective-C 异常,例如参见 stackoverflow.com/questions/24023112/…。人们可能会认为这是一个错误,即 NSTask 抛出异常而不是返回错误,您可以提交错误报告,但我怀疑 Apple 会更改 API。
-
感谢@MartinR。我认为这要么是 API 中的错误,要么 Swift 应该提供一种机制来捕获 ObjC 异常(或者两者都更好)......无论如何,我已经打开了一个错误(openradar.appspot.com/22837476),虽然我猜还有更多有同样问题的API方法
-
我的例子是
NSPredicate(fromMetadataQueryString:)。这应该是一个init?,所以如果字符串不好,它可能打算返回nil,但实际上它只是因NSException而崩溃。 -
好问题!但是如果你自己扔
NSException,那么很容易see how to createNSError(然后扔那个,而不是NSException)
标签: swift cocoa-touch exception foundation nsexception