在 swift 数据模型中使用来自 Objective-C++ 框架的数据类型

Posted

技术标签:

【中文标题】在 swift 数据模型中使用来自 Objective-C++ 框架的数据类型【英文标题】:Using data types from a objective-c++ framework in a swift datamodel 【发布时间】:2016-10-18 04:06:48 【问题描述】:

我想在我的ios 应用程序中使用openCV2 framework,但是,我更喜欢swift。我可以很好地阅读和理解obj-c 以理解框架并在bridging header 中编写我需要的methods,但我不习惯在obj-C 中编写整个应用程序。不幸的是,我需要在我的数据模型或其他地方使用一些data types、(cv::Matcv::MserManager 等)。有没有办法将datatypes 包含在我的bridging header 中,以便我可以在swift 中使用它们?

【问题讨论】:

【参考方案1】:

您不能在从 Swift 调用的代码中使用 C++ 类型。但是,您可以在具有 .mm 扩展名的 Objective-C++ 文件中使用它们。您可以在 Objective-C++ 中混合使用 Objective-C 和 C++ 代码,并且可以通过桥接包装器将声明中未引用 C++ 的 Objective-C 方法公开给 Swift。这些函数仍然可以在它们的实现中使用 C++,这在 Swift 中通过桥接头是不可见的。

您还需要注意语言链接(还记得extern "C"吗?)。

以下是一些提供示例的答案:

1) Video processing with OpenCV in IOS Swift project

2) Include C++ header file in Swift

3)How to access Swift-objects from a c++ class?

【讨论】:

【参考方案2】:

不幸的是,您不能将 C++ 和 Objective-C++ 直接桥接到 Swift。从好的方面来说,您仍然可以在您的应用程序中使用 openCV2 框架,但您需要为您的类型编写 C 或 Objective-C 包装器,如下面的相关问题所述:Can I mix Swift with C++? Like the Objective - C .mm files

【讨论】:

以上是关于在 swift 数据模型中使用来自 Objective-C++ 框架的数据类型的主要内容,如果未能解决你的问题,请参考以下文章

使用Swift 2编程从持久ID中查找歌曲

Swift - 使用 init 初始化模型对象(来自解码器:)

如何在 Swift 3 中为来自 web 服务的 Json 响应创建模型类

如何在 Swift 中访问多个视图控制器中的数据?

在Swift中禁用工具栏按钮

尝试在 Swift 中使用来自 CKRecord 的原始数据形式