在 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::Mat
、cv::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 - 使用 init 初始化模型对象(来自解码器:)