如何在Swift代码中最佳地使用Rust库?

29

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

目前我所想到的是为Rust对象编写一个简单的C API,然后编写一个Objective-C包装器来封装C API,最后将其导出到Swift中,就像这样:

adapting adapters

是否有更少繁琐的方法?是否有自动生成包装函数和C头文件的工具?


4
可能没有直接的方法。 Rust 和 Swift 的内存管理哲学非常不同。 - The Paramagnetic Croissant
考虑到您所列出的间接层次(Rust -> C -> ObjC -> Swift),您最好的选择可能是无聊的老式RPC。 - Linear
1个回答

8

我现在正在做一个类似的项目(将一个C++库移植到iOS和Android上)。

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

这有点乏味,但实际上并不需要太多的工作。只有当您尝试在边界之间传输复杂对象时才会变得痛苦,这会导致编写一堆结构体,然后一切都变得很困难。我建议您避免这样做,坚持使用原始类型和数组。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接