以下是该方案:
我的swift应用程序从蓝牙收集数据,应该实时处理它们。这些数据主要来自IMU(陀螺仪,磁力计和加速度计)。
处理所有这些的算法将用c ++编写并使用一些库,如 Eigen 。我该怎么办?从我发现的:
1)将c ++文件放入我的项目中,在objective-c中编写包装器并将其桥接到Swift。现在也确定我是否可以轻松地在移动应用程序中包含Eigen。我认为这将是一个繁琐的过程
2)将所有算法作为库(.dll
,.lib
并直接从swift调用,不确定是否可行)
3)将所有算法重写为Swift,使用Eigen代替Swift,不确定是否存在类似的东西。此外,这种解决方案效率较低,可能因截止日期而失败。
我该如何解决这个问题?如何以最有效的方式解决它,我可以利用已经存在的c ++代码?
我相信你们中的一些人会认为这个问题是基于意见的,但我不知道如何以排除任何含糊不清的方式陈述这个问题。
如何在iOS应用程序中运行使用Eigen的c ++文件是Swift?
提前致谢
答案 0 :(得分:3)
你不能从Swift调用c ++。但是,可以从objective-c ++中调用c ++。你可以从Swift和objective-c调用objective-c ++。
只需确保面向公众的@interface
代码(在.h
文件中)仅包含objective-c。 (没有类,没有模板,没有名称空间,不包括c ++标题)。
你的@implementation
进入扩展名为.mm
的文件,该文件将编译为objective-c ++ - 在Objective-C对象的实现中为您提供了一个完全使用c ++的objective-c接口
c ++对象作为objective-c ++实现的成员变量非常愉快地生活。但是,它们将默认构造,然后objc运行时调用Init
。如果您使用的是没有默认构造函数的对象,则需要将它们包装在boost::optional
或std::unique_ptr
(等)中。
您可以将objective-c对象导入Swift程序。
以前没有这样做过的人的完整示例: