我在Swift中抛出了一个错误,我试图在ObjC. Works中使用这个错误,除非我使用自定义错误类型使情况复杂化。
下面是我抛出的类型:
@objc public final class MyNetworkResponse: NSObject, Error {
...
}
把迅速我只是做:
throw resp
其中resp的类型为MyNetworkResponse。
在C中,resp似乎桥接到NSError。我无法将其转换/强制转换回MyNetworkResponse类型-这可能吗?如果可能,如何转换?
我想知道当我声明@objc类型时,是否有一种方法可以覆盖异常类型?
1条答案
按热度按时间c9qzyr3d1#
Objective-C中的错误总是被假定为
NSError
对象,因此Swift自动翻译了它们。你可以通过实现CustomNSError protocol来控制如何翻译,但你最终还是会得到一个新对象,一个NSError
。你不能将一个NSError
转换到你的对象。但是,你可以在某种程度上解决它。一个想法:
MyNetworkResponse
上实现CustomNSError
,在errorUserInfo
中你基本上可以放入你的对象所包含的任何信息。MyNetworkResponse.init?(nsError: NSError)
,它查看NSError
示例并尝试将其转换回对象。检查错误域,然后从userInfo
字典中获取数据。有几种变化,拿出任何适合你的,但基本要点是,你需要把你的错误信息到
NSError
的userInfo
。