Подтвердить что ты не робот

Какой лучший способ использовать библиотеку Rust в коде Swift?

Я хотел бы иметь возможность использовать объекты Rust в Swift, так или иначе уведомлять Swift о том, что объекты Rust меняются/происходят события, а также использовать Swift ARC для сохранения объектов Rust.

До сих пор мне приходит в голову написать простой API C для объектов Rust, а затем написать обертку Objective-C для API C, а затем экспортировать ее в Swift, например:

адаптация адаптеров

Есть ли менее утомительный способ? Что-то, что может автоматически генерировать функции-обертки и файлы заголовков C?

4b9b3361

Ответ 1

Я работаю над проектом, подобным этому прямо сейчас (перенос библиотеки С++ для работы как на iOS, так и на Android).

Единственный разумный способ сделать это - это extern "C" ваши интерфейсы Rust и написать для него простой файл .h и создать для них простой класс ObjC. Затем вы вставляете #import <someframework/someframework.h> в заголовок привязки Objective C to Swift, и все это просто работает.

Это немного утомительно, но на самом деле это не так много работает на практике. Это становится болезненным, если вы пытаетесь передать сложные объекты через границы, что приводит к написанию группы структур, а затем все идет вниз. Я советую вам против этого придерживаться примитивов и массивов.

Если ваша модель более сложна, рассмотрите что-то вроде IPC, как говорили другие, хотя на практике это может быть гораздо более болезненным.

Так что да, утомительно. Однако хорошая новость заключается в том, что на самом деле это действительно работает.:)