Swift 中的以下代码会引发 NSInvalidArgumentException 异常:
task = NSTask()
task.launchPath = "/SomeWrongPath"
task.launch()
如何捕获异常?据我了解,Swift 中的 try/catch 是针对 Swift 中抛出的错误,而不是针对从 NSTask(我猜是用 ObjC 编写的)等对象引发的 NSExceptions。我是 Swift 的新手,所以我可能遗漏了一些明显的东西......
编辑:这里是错误的雷达(专门针对 NSTask):openradar.appspot.com/22837476
最佳答案
这里是一些代码,将 NSExceptions 转换为 Swift 2 错误。
现在你可以使用
do {
try ObjC.catchException {
/* calls that might throw an NSException */
}
}
catch {
print("An error ocurred: \(error)")
}
ObjC.h:
#import <Foundation/Foundation.h>
@interface ObjC : NSObject
+ (BOOL)catchException:(void(^)(void))tryBlock error:(__autoreleasing NSError **)error;
@end
ObjC.m
#import "ObjC.h"
@implementation ObjC
+ (BOOL)catchException:(void(^)(void))tryBlock error:(__autoreleasing NSError **)error {
@try {
tryBlock();
return YES;
}
@catch (NSException *exception) {
*error = [[NSError alloc] initWithDomain:exception.name code:0 userInfo:exception.userInfo];
return NO;
}
}
@end
不要忘记将此添加到您的“*-Bridging-Header.h”:
#import "ObjC.h"
关于swift - 在 Swift 中捕获 NSException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32758811/