在 XCode 中桥接 C++ 和 Swift,正确的构建设置是什么?

Bridging C++ and Swift in XCode, what are the right Build Settings?

当我尝试调用我的 C++ 实现文件中的函数时(在 header 中用 #ifdef __cplusplus extern "C" {} 技巧标记为 C 兼容),我我收到错误:

"use of unresolved identifier, 'helloWorld()'"

我只是通过将 cpp 和 header 文件添加到我的项目并在询问我是否要创建桥接时单击 "OK" 来创建桥接 header header.我在桥接 header 中 #including "test.h",里面有函数声明,但由于某种原因 Swift 就是看不到函数。

最奇怪的是,我创建了一个新项目并执行了完全相同的过程,并且调用 helloWorld() 工作正常,所以这是关于我正在尝试向其中添加 cpp 文件的现有项目的问题'没有工作。

然后我假设这是一个 build-settings 问题,我一定是在某些地方弄乱了它们,可能是在我尝试导入静态 C/CPP 库时(我已经删除了它,但我为它更改的一些构建设置可能会保留)。

那么,是否有任何我应该知道的构建设置可以解决这个问题?或者有没有办法将我的构建设置完全重置为默认值(即使这意味着我必须重新创建桥接 header 以使桥接 header 构建设置恢复原位)?

感谢您的所有帮助!

詹姆斯

---编辑---

这是我的 cpp header:

这是我的 cpp 实现文件:

这是我的桥梁header:

这里是 Swift 项目的相关部分:

这是设置桥接的构建设置 header:

好的 - 此问题已解决。问题是桥接头需要从常规目标和测试目标中实现,这是在我现有的项目中,因为我正在进行单元测试。

我只是进入了我的测试目标的构建设置并添加了适当的 Objective-C 桥接头,然后一切正常。

希望对大家有所帮助!

我也有过同样的经历。确保添加单元测试目标,然后确保单元测试目标具有桥接头文件的可见性。

我又犯了一个错误;确保测试用例中使用的每个 Swift Class、枚举都正确设置了目标成员资格。