【发布时间】:2019-07-19 03:22:35
【问题描述】:
我有一个在 Objective-C 中看起来像这样的错误
NSString * const JKConfigurationErrorDomain;
typedef NS_ENUM(NSInteger, JKConfigurationCode) {
JKConfigurationCodeUnknown,
JKConfigurationCodeSomethingBad,
JKConfigurationCodeParsing,
};
现在,这在 Swift 中使用起来很难看。但是从 Swift 4 开始,we can use NSErrorDomain and NS_ERROR_ENUM 让导入的错误在 Swift 中变得更好:
NSErrorDomain const JKConfigurationErrorDomain;
typedef NS_ERROR_ENUM(JKConfigurationErrorDomain, JKConfigurationCode) {
JKConfigurationCodeUnknown,
JKConfigurationErrorSomethingBad,
JKConfigurationErrorParsing,
};
这意味着我现在可以在 Swift 中做这样的事情:
if let myError = error as? JKConfigurationError, myError.code = .somethingBad {
// handle it
}
不必将error 转换为NSError,然后检查其.domain,然后查看.code,它是一个整数,等等。
到目前为止,一切都很好。但是我的库被称为JKConfiguration,并且那里已经有一个JKConfiguration 对象(库的中心部分),一旦我开始在库代码中的任何位置使用JKConfiguration,我就会收到一个错误:
'JKConfiguration' 对于此上下文中的类型查找不明确
我不明白,为什么? NSErrorDomain 或 NS_ERROR_ENUM 做了什么导致类型查找变得模棱两可,我该如何解决?
我已经尝试过的:
- 在
NS_ERROR_ENUMtypedef 上使用NS_SWIFT_NAME并将其重命名为其他名称。查看生成的 Swift 标头,重命名有效,但没有解决问题 - 更改错误域的名称(以及因此在 Swift 中生成的错误类型)。似乎根据生成的 Swift 标头工作,但问题仍然存在。这是为什么呢?
【问题讨论】:
-
请提供完整的复制说明或发布演示的 github 项目。
-
合理的要求。这是一个相对较大的库的一部分,将尝试独立复制它。
-
找出问题所在,编辑问题以正确重现问题。将添加一个答案。
-
编辑了问题以正确重现错误,现在我知道出了什么问题。在下面回答。
标签: objective-c swift