objective-c - 是否可以从 Swift 代码中捕获 Objective-C 错误?

标签 objective-c swift exception

我想做这样的事情:

try {
    SomeObjectiveClass.someMethod()
catch Error {
    print("Recovered objc crash from Swift!")
}

我正在构建一个应用程序,在其中输入一些视觉约束,然后我会收到结果或有关任何错误的消息。

现在,每次我输入错误的约束时,应用程序都会崩溃,但我想显示一个包含错误的对话框并让用户重试。

在我的情况下,我没有“NSError-to- throws”自动翻译。

最佳答案

考虑这个类:

@implementation SomeObjectiveClass

+ (BOOL)someClassMethodWithError:(NSError **)error {
    // some something that 

    if (everythingOk) {
        return true;
    } else {
        if (error) {
            *error = [NSError errorWithDomain:kMyDomain code:kSomeErrorCode userInfo:@{NSLocalizedDescriptionKey : @"Some error message"}];
        }
        return false;
    }
}

- (BOOL)someInstanceMethodWithError:(NSError **)error {
    // some something that 

    if (everythingOk) {
        return true;
    } else {
        if (error) {
            *error = [NSError errorWithDomain:kMyDomain code:kSomeOtherErrorCode userInfo:@{NSLocalizedDescriptionKey : @"Some error message"}];
        }
        return false;
    }
}

@end

然后您可以像这样捕获这些错误:

do {
    try SomeObjectiveClass.someClassMethod()

    // or

    let object = SomeObjectiveClass()
    try object.someInstanceMethod()
} catch {
    print("Recovered \(error) from Swift!")
}

请注意,这种错误捕获不应与我们过去能够在 Objective-C 中执行的异常处理相混淆。开发过程中应消除异常情况。上述内容适用于合法的运行时错误(例如,网络请求失败或由于程序员无法控制的条件而可能发生的其他错误)。

引自Using Swift with Cocoa and Objective-C :

Although Swift error handling resembles exception handling in Objective-C, it is entirely separate functionality. If an Objective-C method throws an exception during runtime, Swift triggers a runtime error. There is no way to recover from Objective-C exceptions directly in Swift. Any exception handling behavior must be implemented in Objective-C code used by Swift.

关于objective-c - 是否可以从 Swift 代码中捕获 Objective-C 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977872/

相关文章:

ios - NSOperation 中委托(delegate)的使用

swift - swift 中的模块是什么意思?

java - 异常处理的内部行为是什么?

delphi - 结构化异常处理程序和 Delphi

ios - 通过 CGMutablePathRef 动画绘制在 drawRect 中的框

objective-c - 像Cloud App一样在Mac上自动上传截图

objective-c - respondsToSelector 的 Swift 等价物是什么?

ios - 第一次按按钮不起作用,但第二次就可以了

ios - swift 2 : @objc protocol and enum array

c# - 为什么 SqlException 在连接失败时被重用