swift - 在 Swift 中捕获 NSException

标签 swift cocoa-touch exception foundation nsexception

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/

相关文章:

ios - 可编码的 API 请求

iPhone : How to achieve functionality similar to popToRootViewController using modalView?

exception - Haskell - 检查文件句柄的有效性

objective-c - UIButton 在隐藏时不起作用

ios - 是否可以检查某个联系人是否存在于 iPhone 的联系人列表中?

c++ - 无法从 C++ 中的函数捕获异常

c++ - 在抛出 std::exception 实例后调用终止

ios - 平滑 MKPolyline 跟随道路

ios - swift 。在 ViewController 之间转换而不在返回时关闭它们

swift - 从自定义 UIView 类设置 View 宽度约束不更新框架