我希望能够在Swift中使用Rust对象,当Rust对象发生变化/事件发生时以某种方式通知Swift,并利用Swift的ARC来保持Rust对象的活着。
到目前为止,我想到的是为Rust对象编写一个普通的C API,然后为C API编写一个Objective-C包装器,然后将其导出到Swift,如下所示:
是否有一种不那么乏味的方式?什么能自动生成包装函数和C头文件?
答案 0 :(得分:4)
我正在开发一个类似于此的项目(移植C ++库以在iOS和Android上运行)。
唯一明智的方法是extern "C"
你的Rust接口并为它编写一个简单的.h文件,然后创建一个简单的ObjC类包装。然后,您将#import <someframework/someframework.h>
弹出到Objective C to Swift绑定标头,这一切都正常。
这有点单调乏味,但实际上并没有那么多工作。如果你试图跨越边界传递复杂的物体,这会导致编写一堆结构,然后一切都走下坡路,这只会让你感到痛苦。我建议你反对,坚持原语和数组。
如果你的模型比那个更复杂,可以考虑像其他人所说的那样的IPC,尽管在实践中这可能会更加痛苦。
所以,是的,单调乏味。然而,好消息是,这实际上确实有效。 :)