2016-03-22 17 views
16

Swift 2.2 ile Xcode 7.3 güncellemesinden bu yana, harici bir Objective-C Kitaplığı'ndan değişkenlere erişemiyorum.extern NSString, Swift 2.2'den beri erişilemiyor

Bugünden itibaren bu değişkenleri erişmek mümkün oldu: Bu önceden derlenmiş bir .a çerçevesinde bir Objective-C Başlık dosyasında tanımlanır

extern NSString* const DEFAULT_URL; 

.

Hızlı kodumda yalnızca DEFAULT_URL numaralı telefonu aramak zorunda kaldım.

Swift 2.2 beri şu errror olsun:

Use of unresolved identifier 'DEFAULT_URL' 

Ben sınıfları ve bu çerçevede yöntemlerini erişmek mümkün, ama ben extern NSStrings erişemez.

Bunu nasıl düzeltebilirim?

+0

Sorunu güncelledim, extern bir obj-c başlık dosyasında tanımlandı. Ayrıca bir köprüleme başlığı oluşturdum. – patrickS

+0

Hayır, ama bunu şimdi ekledim, ancak bu hiçbir şeyi değiştirmiyor. – patrickS

+0

Aynı sorun var. –

cevap

34

@patrickS Bunu aptalca bir nedenden dolayı yaptım, extern const, .h dosyasındaki bir @interface içinde tanımlandı. Bu, XCode/Clang'ın bu sürümü ile Swift koduna özel yapılmış gibi görünüyor. Sadece NSString * değil, tüm extern eksileri için geçerlidir.

örn.

//In Foo.h 
extern const int kBlah 

@interface Foo 
... 
@end 

yerine

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

Bu, sorunumu giderir teşekkürler! – patrickS

+0

yani benimki, teşekkürler! –

+0

Aynı yazım için gider –

2

I aynı problem vardı ve söz konusu olduğu gibi, dahili dizeleri bir bağımlılık yönetilen (öksürük pod öksürük) üçüncü parti içinde benim durumumda vardı kütüphane. Böylece, uzun vadede her şeyi mahvetmeden onları kolayca hareket ettiremedim.

Ben iki çözüm bulundu:

  1. copy-paste (dibine) senin köprüleme
  2. olarak ext dizeleri sağlayan nesnel c kendi statik yardımcı sınıf yazma
  3. başlık için ext beyanı sınıf yöntemleri (ve bu statik yardımcıyı Swift için kullanılabilir hale getirin)

İki çözümden hangisinin daha az hacky olduğunuzu size bırakıyorum (tembel olduğum için 1. çözümle gittim).