импорт Pure Swift Framework в проект Objective-C

avatar
iloalo
8 апреля 2018 в 12:23
851
1
1

Я хочу импортировать фреймворк Swift под названием «Бетховен» в проект Objective-C. Я импортирую этот фреймворк черезcocopods. Проблема в том, что фреймворк написан на чистом Swift. Поскольку классы не являются подклассами NSObject, их нельзя использовать непосредственно в моих классах objC.

Я новичок в Swift и средний в objC, но я думаю, что для этого может быть 2 решения:

1-Изменение всей библиотеки: вероятно, это не оптимальное решение. 2-Использование нового класса, который ведет себя как интерфейс между быстрой структурой и моим кодом objC. Я думаю, что второе решение будет лучшей альтернативой с точки зрения необходимых времени и усилий.

На самом деле в приведенном ниже сообщении объясняется изменение чистых классов Swift, но я не знаю, как применить это в моем случае. Как использовать подкласс Swift, отличный от NSObject, в Objective-C

Как я уже говорил, я не очень способный программист, и для этой проблемы могут быть лучшие решения. Я был бы признателен, если бы кто-то мог мне помочь и предложить лучшее решение для интеграции чистого фреймворка Swift в мой проект objC.

Источник
Dominik Bucher
8 апреля 2018 в 15:36
1

Вы можете каким-то образом создать Swift "Wrapper" вокруг фреймворка Бетховена и преобразовать его в конструкции, поддерживаемые Objective-C. Чем взаимодействовать с API из оболочки...

Ответы (1)

avatar
battlmonstr
8 апреля 2018 в 20:05
1

NSObject обычно не единственная проблема. В Swift есть много функций, которые не поддерживаются в Objective-C. Вот некоторые из них: типы значений swift (структуры), перечисления swift с прикрепленными значениями. Если библиотека использует какой-либо из них, для нее будет невозможно автоматически сгенерировать заголовок Objective-C (.h).

Можно сработать, адаптировав код библиотеки на месте, но, скорее всего, это будет работать в долгосрочной перспективе, если вам когда-нибудь понадобится снова обновить эту библиотеку.

Ваш второй подход звучит лучше: создайте слой, совместимый с Objective-C, поверх библиотеки, которая экспортирует методы, которые необходимо экспортировать с помощью @objc, и адаптирует типы. Если вы пойдете по этому пути, подумайте о том, чтобы сделать PR-вклад в исходную библиотеку, чтобы каждый мог использовать ее в проектах Objective-C, и вы разделяете ответственность за ее обновление при изменении кода swift.

Третий подход заключается в том, чтобы переписать некоторые части вашего приложения на Swift. Это может быть проще, а может и нет, в зависимости от размера части приложения, использующей библиотеку, и от того, насколько хорошо она изолирована от остальной части приложения.

iloalo
9 апреля 2018 в 18:32
0

Спасибо, я добавлю класс, если у меня все получится.