gpt4 book ai didi

ios - 如何从 Swift 类中抛出 NSError 并在 Objective-C 类中捕获它?

转载 作者:行者123 更新时间:2023-11-28 07:20:12 27 4
gpt4 key购买 nike

我需要在 Objective-C 中实现一个 try-catch 结构来处理 Swift 抛出的 NSErrors。

我用 Swift 代码编写了一个 NetService 管理器,我正在一个已经存在的 Objective-C UI 上实现它。

但是,每当我从我的 Swift 类中抛出错误时,try-catch 结构无法捕获错误并继续执行 finally block 。

Swift 错误定义:

enum NEONetServiceErrors: Int
{
case requestMadeWithoutIp
}

struct NEONetServiceErrorStrings
{
let requestMadeWithoutIp = ["NEONetService Error: Request made without IP": NEONetServiceErrors.requestMadeWithoutIp]
}

快速抛出错误:

@objc func requestHelloPage() throws
{
if serviceiPAddress != nil
{
makeHelloRequest()
}
else
{
throw NSError(domain: errorStrings.domain, code: NEONetServiceErrors.requestMadeWithoutIp.rawValue, userInfo:errorStrings.requestMadeWithoutIp)
}
}

Objective-C 属性:

@property NEONetServiceManager* netServiceManager;
@property NSError* _Nullable __autoreleasing * _Nullable netServiceError;

Objective-C 错误处理:

- (IBAction)pressUpdateButton:(id)sender
{
@try
{
[self.netServiceManager requestHelloPageAndReturnError: self.netServiceError];
}
@catch (NSException *exception)
{
NSLog(@"Throwing");
}
@finally
{
NSLog(@"Finally");
}
}

输出:

2019-10-18 14:47:03.289268-0300 NEOFirmUpdate[16533:2389800] Start
2019-10-18 14:47:03.292696-0300 NEOFirmUpdate[16533:2389800] Finally

你能帮我弄清楚我在错误处理方面做错了什么吗?

最佳答案

问题是 Swift Error/Objective-C NSError 不是 NSException。您已配置为捕获 NSExceptions,但这无关紧要。

当 Swift 抛出错误时,在 Objective-C 中“捕获”NSError 的方法是使用 NSError** 参数间接访问,就像它一直以来那样。

NSError* err = nil;
BOOL ok = [self.netServiceManager requestHelloPageAndReturnError:&err];
if (ok) {
// proceed normally
} else {
// you got an error, it is sitting in `err`
}

(注意 Swift 如何准确地提供 BOOL 结果,以便您可以实现正确的模式。)

关于ios - 如何从 Swift 类中抛出 NSError 并在 Objective-C 类中捕获它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58455883/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com