【问题标题】:Using Swift with Qt在 Qt 中使用 Swift
【发布时间】:2015-09-01 09:24:45
【问题描述】:

我们可以很容易地使用Objective-C with C++ in Qt

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

考虑到您可以同时使用 Objective-C 和 Swift 以及桥接头,是否可以在 Qt 项目中编译 Swift 代码并使用 C++ 访问 Swift 的第一类对象(类、结构、枚举等)?


如果可以的话……

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

从 Objective-C 调用 Swift 需要一个桥接头来表示哪些 Swift 文件可用。然后在 XCode 项目中引用此标头;我们可以在 Qt .pro 中执行此操作吗?如果可以,如何操作?

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

【问题讨论】:

  • 理论上可以使用桥接头。你已经尝试过什么?
  • @JAL,但理论上和实践上是否可行?据我所知,Swift 只与 Objective-C 有直接关系,而不是 C++
  • 好吧,您需要为 Qt C++ 代码创建一个 C 或 Objective-C 包装器。见:stackoverflow.com/questions/24042774/…
  • @JAL,这将允许从 Swift 调用 C++,但对于 Qt,我们希望它反过来 - 从 C++ 调用 Swift 代码,例如,可以创建一个 Swift做一些不同的事情的类,例如send a NSNotification through the notification centre。在此示例中,MyNotification::Display 的主体将使用 Swift 表示法而不是 Objective-c 编写,或者只是从 .swift 文件中的类中调用 Swift 方法。

标签: c++ macos qt swift


【解决方案1】:

从 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 文件中。

【讨论】:

  • "Obj-C 和 Obj-C++ 函数和方法可以直接从 Obj-C++ 调用" - 当然,这是 Obj-C 的设计,或者确实你的意思是“直接来自C++”?你能指出方法的方向,让 swift 编译器在 C++ 中为 Swift 生成桥接头吗?这会与 Swift 和 Objective-C 之间的桥接头不同吗?
  • @TheDarkKnight 不,Obj-C++ 的桥接头只是来自 Obj-C 的,因为它也是有效的 Obj-C++。由于 Qt 对 C++ 的使用也使其成为有效的 Obj-C++,因此您可以简单地将所有 .cpp 文件重命名为 .mm,一切都应该仍然有效。
猜你喜欢
  • 2015-09-18
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多