Come posso aggiungere i riferimenti alle classi utilizzati nell’intestazione -Swift.h?

Sto integrando il codice Swift in un grande progetto Objective-C, ma sto incontrando dei problemi quando il mio codice Swift fa riferimento alle classi Objective-C. Ad esempio, supponiamo di avere:

  1. Una class Objective-C chiamata MyTableViewController
  2. Una class Objective-C chiamata DeletionWorkflow

Ho dichiarato una class Swift come segue:

 class DeletionVC: MyTableViewController { let deleteWorkflow: DeletionWorkflow ... } 

Se ora provo a usare questa class importando ProjectName-Swift.h nel codice Objective-C, ottengo errori di simboli non definiti sia per MyTableViewController che per DeletionWorkflow .

Posso risolvere il problema in quel singolo file sorgente importando DeletionWorkflow.h e MyTableViewController.h prima di importare ProjectName-Swift.h ma questo non si ProjectName-Swift.h a un progetto di grandi dimensioni in cui desidero che Swift e Objective-C interagiscano spesso .

C’è un modo per aggiungere riferimenti di class a ProjectName-Swift.h modo che questi errori non si verifichino quando provo a usare le classi Swift dal codice Objective-C nella mia app?

Questo è un po ‘sciocco, ma sembra che la tua “soluzione” sia ciò che Apple intendeva, almeno per ora. Dalla guida all’interoperabilità :

Se usi i tuoi tipi Objective-C nel tuo codice Swift, assicurati di importare le intestazioni Objective-C per quei tipi prima di importare l’intestazione generata da Swift nel file Objective-C .m cui vuoi accedere al codice Swift.

In questa discussione sui devforum , qualcuno ha menzionato che hanno già fatto un errore in Radar. Probabilmente dovresti anche tu.

È ansible creare un altro file di intestazione che inoltra dichiara o importa le classi necessarie e quindi importa ProjectName-Swift.h . Ad esempio, creare un file denominato ProjectName-Swift-Fixed.h con i contenuti:

 // ProjectName-Swift-Fixed.h // Forward declarations for property classs @class DeletionWorkflow; // Imports for superclasss #import "MyTableViewController.h"; #import "ProjectName-Swift.h" 

Quindi, anziché #import "ProjectName-Swift.h" nella tua base di codice, usa #import "ProjectName-Swift-Fixed.h .