2015-09-12 3 views
22

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

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

adapting adapters

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

+4

Наверное, это не прямой способ. Принципы управления памятью Rust и Swift очень разные. –

+0

Учитывая слои косвенности, которые вы выложили (Rust -> C -> ObjC -> Swift), ваш лучший выбор, вероятно, будет скучным старым RPC. – LinearZoetrope

ответ

4

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

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

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

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

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

Смежные вопросы