我刚刚用 Swift,Objective-C 和 C + + 做了一个小的示例项目。这是一个如何在 iOS 中使用 OpenCV 拼接的演示。OpenCV API 是 C + + 的,所以我们不能直接从 Swift 上访问它。我使用一个小的包装器类,它的实现文件是 Objective-C + + 。头文件是干净的 Objective-C 文件,所以 Swift 可以直接与之对话。您必须注意不要间接地将任何 C + +-ish 文件导入到与 Swift 交互的头文件中。
您还可以在两者之间建立 跳过 Objective-C文件。只需添加一个 C 头文件。Cpp 源文件。在头文件中只有 C 声明,并在源文件中包含任何 C + + 代码。然后将 C 头文件包含在 * *-Bridge-Header.h 中。
下面的示例返回一个指向 C + + 对象(struct Foo)的指针,这样 Swift 就可以存储在 COpaquePointer 中,而不必在全局空间中定义 struct Foo。
H 文件(由 Swift 看到-包含在桥接文件中)
#ifndef FOO_H
#define FOO_H
// Strictly C code here.
// 'struct Foo' is opaque (the compiler has no info about it except that
// it's a struct we store addresses (pointers) to it.
struct Foo* foo_create();
void foo_destroy(struct Foo* foo);
#endif
内部源文件 Foo.cpp (Swift 没有看到) :
extern "C"
{
#include "Foo.h"
}
#include <vector>
using namespace std;
// C++ code is fine here. Can add methods, constructors, destructors, C++ data members, etc.
struct Foo
{
vector<int> data;
};
struct Foo* foo_create()
{
return new Foo;
}
void foo_destroy(struct Foo* foo)
{
delete foo;
}