Двунаправленный Javascript — быстрый мост для общей бизнес-логики

#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. Вы уже нашли какое-либо решение этой проблемы?