У меня есть ошибка, которая раньше выглядела так в Objective-C
NSString * const JKConfigurationErrorDomain;
typedef NS_ENUM(NSInteger, JKConfigurationCode) {
JKConfigurationCodeUnknown,
JKConfigurationCodeSomethingBad,
JKConfigurationCodeParsing,
};
Теперь, это уродливо использовать в Swift.Но начиная со Swift 4, мы можем использовать NSErrorDomain
и 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_SWIFT_NAME
на NS_ERROR_ENUM
typedef и переименуйте его в другое.Глядя на сгенерированный заголовок Swift, переименование работает, но не решает проблему - Измените имя домена ошибки (и, следовательно, сгенерированного типа ошибки в Swift).Кажется, работает в соответствии с сгенерированным заголовком Swift, но проблема все еще сохраняется.Почему это так?