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, поскольку я ленив).