2016-03-22 13 views
16

Od aktualizacji do Xcode 7.3 z Swift 2.2 nie mam dostępu do zmiennych z zewnętrznej biblioteki Objective-C.extern NSString niedostępne od Swift 2.2

Od dzisiaj byłem w stanie uzyskać dostęp do tego zmienne:

extern NSString* const DEFAULT_URL; 

ta jest zdefiniowana w pliku Objective-C Główka skompilowany ramach .a.

W moim szybkim kodzie musiałem tylko zadzwonić pod numer DEFAULT_URL.

Od Swift 2.2 pojawia się następujący errror:

Use of unresolved identifier 'DEFAULT_URL' 

jestem w stanie uzyskać dostęp do klas i metod tych ram, ale nie może uzyskać dostępu extern NSStrings.

Wszelkie pomysły, jak to naprawić?

+0

Zaktualizowałem problem, extern jest zdefiniowany w pliku nagłówkowym obj-c. Zbudowałem także nagłówek pomostowy. – patrickS

+0

Nie, ale dodałem to teraz, ale to niczego nie zmienia. – patrickS

+0

Mam ten sam problem. –

Odpowiedz

34

@patrickS Miałem to z głupiego powodu, moja zewnętrzna const została zdefiniowana wewnątrz @ interfejsu w moim pliku .h. Wydaje się, że stało się to prywatne dla kodu Swift z tą wersją XCode/Clang. Ma zastosowanie do wszystkich zewnętrznych stałych, nie tylko NSString *.

np.

//In Foo.h 
extern const int kBlah 

@interface Foo 
... 
@end 

zamiast

//In Foo.h 
@interface Foo 
extern const int kBlah 
... 
@end 
+0

To rozwiązuje mój problem dzięki! – patrickS

+0

tak robi moje, dzięki! –

+0

to samo dotyczy typedef –

2

miałem ten sam problem i jak w pytaniu, struny ext było w moim przypadku w zależności zarządzane (kaszel pod kaszel) osoba trzecia biblioteka. Więc nie mogłem łatwo ich przenosić bez bałagania wszystkiego na dłuższą metę.

znalazłem dwa rozwiązania:

  1. copy-paste deklarację EXT (w dolnej części) swój pomostowego nagłówka
  2. wyraź swoją statyczną klasę pomocniczą w Objective C, który dostarcza ciągi EXT metody klasy (i spraw, aby ten statyczny pomocnik był dostępny dla Swifta)

Zostawiam ci, które z dwóch rozwiązań uznasz za mniej hackowskie (poszedłem z rozwiązaniem 1, ponieważ jestem leniwy).

Powiązane problemy