在Swift代码中使用Rust库的最佳方法是什么?

Kor*_*nel 22 ffi rust swift

我希望能够在Swift中使用Rust对象,以某种方式在Rust对象发生更改/事件发生时通知Swift,并利用Swift的ARC来保持Rust对象的活动.

到目前为止,我想到的是为Rust对象编写一个普通的C API,然后为C API编写一个Objective-C包装器,然后将其导出到Swift,如下所示:

适配适配器

有一种不那么乏味的方式吗?什么能自动生成包装函数和C头文件?

Bre*_*loy 6

我现在正在开发一个与此类似的项目(移植 C++ 库以在 iOS 和 Android 上运行)。

唯一合理的方法是在extern "C"你的 Rust 接口中编写一个简单的 .h 文件,并为它们创建一个简单的 ObjC 类包装。然后将 弹出#import <someframework/someframework.h>到 Objective C 到 Swift 绑定标头中,一切正常。

这有点乏味,但实际上并没有那么多工作。如果您尝试跨边界传输复杂对象,这只会导致痛苦,这会导致编写一堆结构体,然后一切都会走下坡路。我建议你不要这样做,坚持使用原语和数组。

如果您的模型比这更复杂,请考虑像其他人所说的 IPC 之类的东西,尽管这在实践中可能会痛苦得多。

所以是的,乏味。不过,好消息是这确实有效。:)