在目标C中接收Swift throw-n自定义错误类型

dgjrabp2  于 2023-03-07  发布在  Swift
关注(0)|答案(1)|浏览(107)

我在Swift中抛出了一个错误,我试图在ObjC. Works中使用这个错误,除非我使用自定义错误类型使情况复杂化。
下面是我抛出的类型:

@objc public final class MyNetworkResponse: NSObject, Error {
...
}

把迅速我只是做:

throw resp

其中resp的类型为MyNetworkResponse。
在C中,resp似乎桥接到NSError。我无法将其转换/强制转换回MyNetworkResponse类型-这可能吗?如果可能,如何转换?
我想知道当我声明@objc类型时,是否有一种方法可以覆盖异常类型?

c9qzyr3d

c9qzyr3d1#

Objective-C中的错误总是被假定为NSError对象,因此Swift自动翻译了它们。你可以通过实现CustomNSError protocol来控制如何翻译,但你最终还是会得到一个新对象,一个NSError。你不能将一个NSError转换到你的对象。
但是,你可以在某种程度上解决它。一个想法:

  • 在你的MyNetworkResponse上实现CustomNSError,在errorUserInfo中你基本上可以放入你的对象所包含的任何信息。
  • 实现MyNetworkResponse.init?(nsError: NSError),它查看NSError示例并尝试将其转换回对象。检查错误域,然后从userInfo字典中获取数据。

有几种变化,拿出任何适合你的,但基本要点是,你需要把你的错误信息到NSErroruserInfo

相关问题