使用Swift和Qt

The*_*ght 15 c++ macos qt swift

我们可以很容易地在Qt中使用Objective-C和C++.

观看了Apple的许多WWDC 2015演讲,我预计Swift将取代OS-X(和iOS)开发的Objective-C; 所有的演示都使用了Swift.

考虑到你可以一起使用Objective-C和Swift,使用桥接头,是否可以在Qt项目中编译Swift代码并使用C++访问Swifts的第一类对象(Classes,Structs,Enums等)?


如果有可能...

从Qt调用Objective-C函数需要将代码包装在C函数中,并从Qt调用C头.

从Objective-C调用Swift需要一个桥接头来表示哪些Swift文件可用.然后在XCode项目中引用此标头; 我们可以在Qt .pro中做到这一点,如果是这样,怎么样?

假设我们可以指定桥接头,我们仍然只能从Objective-C文件调用Swift,但是可以直接从Qt中调用Swift,在C++中?

Rei*_*ica 2

从 Qt 调用 Objective-C 函数需要将代码包装在 C 函数中,并带有要从 Qt 调用的 C 标头。

这并不完全正确,Obj-C 和 Obj-C++ 函数和方法可以直接从 Obj-C++ 调用。鉴于 Obj-C++(大部分)是 C++,Qt 和 Obj-C/C++ 之间的接口是微不足道的。您可以简单地将 Qt 实现文件命名为 .mm 而不是 .cpp!您可以直接从 Obj-C 方法实现调用 Qt 或标准 C++,编译为 Obj-C++ 文件(.mm,而不是 .m),反之亦然。

有一种方法可以引导 swift 编译器为您生成桥接标头,并且可以将其作为自定义编译器或自定义目标集成到 .pro 文件中。

  • @TheDarkKnight 不,Obj-C++ 的桥接头只是来自 Obj-C 的桥接头,因为它也是有效的 Obj-C++。由于 Qt 对 C++ 的使用使其对 Obj-C++ 也有效,因此您只需将所有 .cpp 文件重命名为 .mm 即可,一切都应该仍然有效。 (2认同)