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

时间:2015-09-12 11:07:08

标签: swift rust ffi

我希望能够在Swift中使用Rust对象,当Rust对象发生变化/事件发生时以某种方式通知Swift,并利用Swift的ARC来保持Rust对象的活着。

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

adapting adapters

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

1 个答案:

答案 0 :(得分:4)

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

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

这有点单调乏味,但实际上并没有那么多工作。如果你试图跨越边界传递复杂的物体,这会导致编写一堆结构,然后一切都走下坡路,这只会让你感到痛苦。我建议你反对,坚持原语和数组。

如果你的模型比那个更复杂,可以考虑像其他人所说的那样的IPC,尽管在实践中这可能会更加痛苦。

所以,是的,单调乏味。然而,好消息是,这实际上确实有效。 :)