2015-06-16 23 views
15

Possiamo, abbastanza facilmente, utilizzare Objective-C with C++ in Qt.Utilizzo di Swift con Qt

Dopo aver assistito a molti dei discorsi di Apple del WWDC 2015, mi aspetto che Swift sostituisca Objective-C per lo sviluppo di OS X (e iOS); tutte le dimostrazioni hanno usato Swift.

Considerando che è possibile utilizzare Objective-C e Swift insieme, con un'intestazione di bridging, è possibile compilare il codice Swift in un progetto Qt e accedere a oggetti di prima classe Swifts (Classi, Strutture, Enumerazioni ecc.) Con C++?


Se è possibile ...

chiamata di una funzione Objective-C da Qt richiede avvolgendo il codice in una funzione C, con un'intestazione C da chiamare da Qt.

Chiamare Swift da Objective-C richiede un'intestazione di bridging per indicare quali file Swift sono disponibili. Questa intestazione viene quindi referenziata in un progetto XCode; possiamo farlo in un Qt .pro e se sì, come?

Supponendo di poter specificare l'intestazione del bridging, abbiamo comunque reso possibile chiamare Swift dai file Objective-C, ma Swift può essere chiamato direttamente da Qt, in C++?

+0

È teoricamente possibile con un'intestazione di collegamento. Che cosa hai già provato? – JAL

+0

@ JAL, ma è teoricamente e praticamente possibile? Per quanto ne so, Swift ha solo una relazione diretta con Objective-C, non con C++ – TheDarkKnight

+0

Beh, avresti bisogno di creare un wrapper C o Objective-C per il codice Qt C++. Vedi: http://stackoverflow.com/questions/24042774/can-i-mix-swift-with-c-like-the-objective-c-mm-files – JAL

risposta

1

Chiamare una funzione Objective-C da Qt richiede il wrapping del codice in una funzione C, con un'intestazione C da chiamare da Qt.

Non è proprio vero, le funzioni e i metodi Obj-C e Obj-C++ possono essere richiamati direttamente da Obj-C++. Dato che Obj-C++ è (principalmente) C++, l'interfaccia tra Qt e Obj-C/C++ è banale. Puoi semplicemente dare un nome ai file di implementazione Qt .mm invece di .cpp! È possibile chiamare Qt o C++ standard direttamente dalle implementazioni del metodo Obj-C, compilati come file Obj-C++ (.mm, non .m) e viceversa.

C'è un modo per convincere il compilatore rapido a generare per te un'intestazione di bridging e questo può essere integrato nel file .pro come un compilatore personalizzato o una destinazione personalizzata.

+0

* "Le funzioni e i metodi Obj-C e Obj-C++ possono essere richiamati direttamente da Obj-C++" * - Ovviamente, è design di Obj-C, o intendevi * "direttamente da C++" *? Puoi indicarmi la direzione del metodo per far sì che il compilatore rapido generi l'intestazione di bridging per Swift in C++? Sarebbe diverso dall'intestazione di bridging tra Swift e Objective-C? – TheDarkKnight

+1

@TheDarkKnight No, l'intestazione del bridging per Obj-C++ è semplicemente quella di Obj-C, poiché è anche Obj-C++ valido. Poiché l'uso di C++ da parte di Qt rende anche Obj-C++ valido, puoi semplicemente rinominare tutti i tuoi file .cpp in .mm e tutto dovrebbe funzionare. –