2015-11-05 11 views
5

Sto lavorando a un progetto Objective-C e sto provando a introdurre Swift. Ho le intestazioni di bridging che funzionano in modo che il codice venga compilato, tuttavia nessuna delle classi Objective-C viene raccolta dal completamento automatico.In Xcode 7, Swift non può completare automaticamente il codice Objective-C

ho provato:

  1. Chiusura di Xcode/riavviare il computer
  2. eliminazione della cartella DerivedData a (~/Library/Developer/Xcode/DerivedData)
  3. rimozione del file in ~/Library/caches/com.apple.dt.Xcode
  4. Modifica del tipo di simulatore

Tuttavia, questi suggerimenti non ha funzionato per me.

Il completamento automatico funziona bene per UIKit, ecc. E per il mio altro codice Swift. È solo il codice Objective-C esposto dall'intestazione del bridging che non si completerà automaticamente.

Qualche suggerimento?

+0

Compila ed esegue? – Darko

+0

Sì, verrà compilato e funzionerà correttamente. – Wyatt

+0

Beh, l'ho appena provato sulla mia macchina e posso dirti che dovrebbe funzionare; a volte Xcode diventa divertente sulla funzione di completamento automatico, forse riavvia il computer (che risolve sempre le cose, giusto? :)) – Alex

risposta

5

penso che ho capito questo fuori:

Il nostro progetto ha obiettivi multipli, e la maggior parte dei file appartenere a più bersagli. Se desideri il completamento automatico, l'intestazione che stai importando deve essere importata nell'intestazione del bridging per ogni destinazione a cui appartiene il file.

Quando ho importato l'intestazione che volevo in ogni intestazione di bridging, il completamento automatico ha iniziato a funzionare come previsto.

Aggiornamento: Sembra che sia possibile consolidare fino a un'intestazione di bridging se tale impostazione funziona per il progetto. Ciò impedirebbe di dover aggiornare più intestazioni ogni volta che si desidera aggiungere un'importazione.

1

Recentemente mi sono imbattuto in questo problema con un grande progetto per lo più objc. Spero che questo aiuti qualcuno.

Per me la funzione di completamento automatico ha funzionato prima in questo progetto, ma poi ha iniziato a fallire per tutte le classi/metodi c oggettivi. Il progetto è stato comunque compilato senza problemi.

Alla fine ho commentato tutte le importazioni esistenti nell'intestazione del bridging e aggiungendo una semplice classe di test, per cui il completamento automatico funzionava. Quindi decommentando ciascuna delle altre importazioni fino a quando non ho isolato quale ha causato il problema.

Per esempio il mio colpo di testa in fondo si presentava così:

#import "MyClass.h" 
#import "MyOtherClass.h" 
#import "SomeThirdPartyModule.h" 
etc... 

ho fatto questo:

#import "SimpleTestClassWithOneMethod.h" 
// #import "MyClass.h" 
// #import "MyOtherClass.h" 
// #import "SomeThirdPartyModule.h" 

E completamento automatico inizia a lavorare per SimpleTestClass quando viene utilizzato da Swift.

Quindi ha iniziato a decommentare altre classi dall'intestazione del bridging finché non ha funzionato. L'importazione che ha causato il problema è stata una struttura di terze parti, non è sicuro del motivo per cui ha causato un problema, ma ho appena estratto ciò che mi serviva da quella particolare intestazione per il mio codice rapido e l'ho importato separatamente.

2

Grazie alla risposta joel.d, ho risolto lo stesso problema nel mio progetto.

nel colmare-header ho avuto la linea:

#import "BTData.h" 

Si prega di notare che si trattava di qualche sdk dal cacao pod, e recentemente abbiamo aggiornato tutte le cialde, quindi probabilmente thats quando problemi completamento automatico è iniziata. Sostituendo la riga precedente con questa in basso è stato risolto il problema e ora tutte le classi obj-c si completano automaticamente in file swift.

#import <Braintree/BTData.h> 
Problemi correlati