2015-06-16 3 views
15

Мы можем довольно легко использовать Objective-C with C++ in Qt.Использование Swift с Qt

Наблюдая за многими беседами Apple в WWDC 2015, я ожидаю, что Swift вытеснит Objective-C для разработки OS X (и iOS); все демонстрации использовали Свифт.

Учитывая, что вы можете использовать Objective-C и Swift вместе с заголовочным заголовком, можно ли скомпилировать Swift-код в проекте Qt и получить доступ к объектам первого класса Swifts (классы, структуры, контировки и т. Д.) С помощью C++?


Если это возможно ...

Вызов функции Objective-C от Qt требует оборачивать код в функции C, с заголовком C для вызова из Qt.

Для вызова Swift из Objective-C требуется соединительный заголовок для обозначения того, какие файлы Swift доступны. Этот заголовок затем ссылается на проект XCode; можем ли мы сделать это в Qt .pro, и если да, то как?

Предполагая, что мы можем указать заголовок моста, мы по-прежнему позволяли вызывать Swift из файлов Objective-C, но может ли Swift быть вызван непосредственно из Qt в C++?

+0

Теоретически это возможно с помощью соединительного разъема. Что вы уже пробовали? – JAL

+0

@JAL, но теоретически и практически возможно? Насколько я могу судить, Swift имеет прямое отношение к Objective-C, а не C++ – TheDarkKnight

+0

Ну, вам нужно создать C или Objective-C-оболочку для кода Qt C++. См. Http://stackoverflow.com/questions/24042774/can-i-mix-swift-with-c-like-the-objective-c-mm-files – JAL

ответ

1

Вызов функции Objective-C из Qt требует обертывания кода в функции C, с заголовком C, который вызывается из Qt.

Это не совсем так, Obj-C и Obj-C++ функции и методы можно вызывать непосредственно из Obj-C++. Учитывая, что Obj-C++ является (главным образом) C++, сопряжение между Qt и Obj-C/C++ тривиально. Вы можете просто назвать свои файлы реализации Qt .mm вместо .cpp! Вы можете вызывать Qt или стандартный C++ непосредственно из реализаций метода Obj-C, скомпилированных как файлы Obj-C++ (.mm, not .m) и наоборот.

Существует способ укоротить быстрый компилятор для создания заголовка моста для вас, и это может быть интегрировано в .pro-файл в качестве настраиваемого компилятора или настраиваемой цели.

+0

* «Функции и методы Obj-C и Obj-C++ можно вызывать непосредственно из Obj-C++» * - Конечно, это по дизайну Obj-C, или вы имели в виду * «непосредственно из C++» *? Можете ли вы указать мне в сторону метода, чтобы получить быстрый компилятор для создания заголовка моста для Swift в C++? Будет ли это отличаться от мостикового заголовка между Swift и Objective-C? – TheDarkKnight

+1

@ TheDarkKnight Нет, мостовой заголовок для Obj-C++ является просто одним из Obj-C, так как он также действителен Obj-C++. Поскольку использование Qt C++ делает его действительным Obj-C++, вы можете просто переименовать все ваши .cpp-файлы в .mm, и все должно работать. –

Смежные вопросы