#javascript #swift #nativescript #bidirectional #bridging
#javascript #swift #nativescript #двунаправленный #мостирование
Вопрос:
Я ищу решение для настройки swift SDK (например, framework), которое обеспечивает доступ к общей бизнес-логике из пакета javascript (совместно используемого, например, с приложением для Android или SDK). Я не хочу использовать webviews и т.д…
общая бизнес-логика в пакете javascript
У меня есть пакет Javascript, содержащий общую логику проекта, доступный как api, например myBundle.js который экспортирует несколько модулей / функций / объектов.
Я хочу создать собственное приложение Swift, которое использует вышеупомянутый Swift SDK и, как таковое, может получить доступ к бизнес-логике из myBundle.js:
// module "myModule.js"
function cube(x) {
return x * x * x;
}
const foo = Math.PI 1.0;
export { cube, foo };
Шаг 1: В моем проекте Swift я хотел бы
import Foundation
public class MySwiftClass {
func doSomeStuffBasedOnJavascriptCode() {
// access MyBundle.js, and run 'cube' method on 'foo' from MyModule
let x = cube(foo);
NSLog("result: %l", x);
}
}
Шаг 2. Кроме того, доступ к Swift-коду из JS также был бы очень полезен!
Я попробовал: … используя Nativescript с iOS, и смог настроить приложение Swift, которое запускает среду выполнения V8. Эта настройка позволяет мне получить доступ к собственному Swift-коду из пакета javascript (Nativescript с swift). Итак, шаг 2 покрыт этим. Однако Nativescript внутренне настраивает среду выполнения и «запускает основной контекст пакета» (ожидая, что он будет содержать приложение «run»?). Он объединяет логику базовой среды выполнения V8 с очень простым интерфейсом Nativescript:
Config* config = [[Config alloc] init];
config.IsDebug = isDebug;
config.LogToSystemConsole = isDebug;
config.MetadataPtr = metadataPtr;
config.BaseDir = baseDir;
config.ArgumentsCount = argc;
config.Arguments = argv;
[NativeScript start:config];
Есть ли простой способ получить доступ к контексту базовой среды выполнения и вызвать функции для модулей из пакета явно во всем коде Swift? Точно так же, как вы можете добавлять Swift-код по всему JS-коду в комплекте…
Итак, я действительно ищу двунаправленное решение, в котором javascript использует Swift-код, а Swift-код использует JS.
Другие решения также приветствуются!
Комментарии:
1. Вы уже нашли какое-либо решение этой проблемы?