2016-03-22 14 views
16

Poiché l'aggiornamento a Xcode 7.3 con Swift 2.2 non riesco ad accedere alle variabili da una libreria Objective-C esterna.NSString esterno non accessibile da Swift 2.2

Da oggi sono stato in grado di accedere a questi variabili:

extern NSString* const DEFAULT_URL; 

Questo è definito in un file di Objective-C colpo di testa da un quadro .a precompilato.

Nel mio codice rapido ho dovuto solo chiamare DEFAULT_URL.

Dal Swift 2.2 ottengo il seguente errror:

Use of unresolved identifier 'DEFAULT_URL' 

sono in grado di accedere alle classi e metodi di questo quadro, ma non posso accedere extern NSStrings.

Qualche idea su come risolvere questo problema?

+0

Ho aggiornato il problema, l'extern è definito in un file di intestazione obj-c. Ho anche creato un header per il bridging. – patrickS

+0

No, ma l'ho aggiunto ora, ma questo non cambia nulla. – patrickS

+0

Ho lo stesso problema. –

risposta

34

@patrickS L'ho avuto per una ragione stupida, il mio extern const è stato definito all'interno di un'interfaccia @ nel mio file .h. Questo sembra aver reso privato il codice Swift con questa versione di XCode/Clang. Si applica a tutti i comandi extern non solo a NSString *.

ad es.

//In Foo.h 
extern const int kBlah 

@interface Foo 
... 
@end 

invece di

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

Questo risolve il mio problema grazie! – patrickS

+0

anche il mio, grazie! –

+0

lo stesso vale per typedef –

2

Ho avuto lo stesso problema e, come nella questione, le stringhe ext erano nel mio caso in una dipendenza gestiti (tosse pod tosse) di terze parti biblioteca. Quindi non ho potuto spostarli facilmente senza rovinare tutto a lungo andare.

ho trovato due soluzioni:

  1. copia-incolla della dichiarazione ext al (la parte inferiore del) la tua colmare intestazione
  2. Scrivi la tua classe di supporto statico in Objective C che fornisce le corde ext come metodi di classe (e rendere disponibile a Swift questo helper statico)

Lascio a voi quale delle due soluzioni si ritenga meno hacky (sono andato con la soluzione 1, poiché sono pigro).

Problemi correlati