Extern NSString недоступен со времен Swift 2.2
Так как обновление до Xcode 7.3 с помощью Swift 2.2, я не могу получить доступ к переменным из внешней библиотеки Objective-C.
С сегодняшнего дня я смог получить доступ к этим переменным:
extern NSString* const DEFAULT_URL;
Это определено в файле заголовка Objective-C из предварительно скомпилированной рамки .a.
В моем быстром коде мне пришлось только позвонить DEFAULT_URL
.
Так как Swift 2.2 получает следующее об ошибке:
Use of unresolved identifier 'DEFAULT_URL'
Я могу получить доступ к классам и методам этой структуры, но я не могу получить доступ к extern NSStrings
.
Любые идеи, как это исправить?
Ответы
Ответ 1
@patrickS У меня было это по глупой причине, мой extern const был определен внутри @interface в моем файле .h. Это, похоже, сделало его приватным для кода Swift с этой версией XCode/Clang. Он применяется ко всем внешним константам не только NSString *.
например.
//In Foo.h
extern const int kBlah
@interface Foo
...
@end
вместо
//In Foo.h
@interface Foo
extern const int kBlah
...
@end
Ответ 2
У меня была такая же проблема, и, как и в вопросе, строки ext были в моем случае в библиотеке сторонних разработчиков (cough pod cough). Поэтому я не мог легко перемещать их, не впутывая все в конечном итоге.
Я нашел два решения:
- скопировать-вставить объявление ext (внизу) вашего моста
заголовок
- напишите свой собственный статический вспомогательный класс в объективе c, который
предоставляет ext строки как методы класса (и делает этот статический помощник доступным для Swift)
Я оставляю это для вас, какое из двух решений вы считаете менее взломанным (я пошел с решением 1, поскольку я ленив).