Как вы получаете доступ к KrollCallback в swift?

#appcelerator #appcelerator-hyperloop

#ускоритель приложений #ускоритель приложений-hyperloop #appcelerator #appcelerator-hyperloop

Вопрос:

Я внедрил пользовательский фреймворк, и он интегрирован в проект с поддержкой hyperloop.

Я передаю function определения в качестве аргументов swift функции, которая принимает протокол.

Javascript:

 var customListener = {};

customListener.onPayEvent = function(event) {
    console.log("moop");
  };

var PayView = require('Pay/PayView');

var payView = PayView.alloc().initWithPayEventListener(customListener);
  

Это определение функции javascript представлено в виде KrollCallback .

введите описание изображения здесь

Быстрый код:

 class PayListener: NSObject, WootPayEventListener {
    let payEventListener: PayEventListener
    
    init(payEventListener: PayEventListener) {
        self.payEventListener = payEventListener
    }
    
    public func onPayEvent(PayEvent: PayEvent) {

        os_log("calling payEventListener.onPayEvent")
        os_log("listener description = %{public}@", self.payEventListener.description)

        os_log("listener debugDescription = %{public}@", self.payEventListener.debugDescription ?? "")
//        self.payEventListener.onPayEvent(payEvent: "woo dogggy")
    }
}
  

Как мне вызвать методы для этого объекта, чтобы я мог вернуть результат из swift обратно в javascript?

Ответ №1:

Я смог сделать это, создав TitaniumKit фреймворк локально, а затем импортировав его в свой проект.

TitaniumKit Исходный код находится здесь: https://github.com/appcelerator/titanium_mobile/tree/master/iphone/TitaniumKit

Текущие этапы сборки фреймворка приведены ниже

carthage build --archive

Как только я импортировал его в проект, я смог использовать KrollCallback вот так:

 class SimplePayListener: NSObject, SimplePayEventListener {
    let payEventListener: PayEventListener
    
    init(payEventListener: PayEventListener) {
        self.payEventListener = payEventListener
    }
    
    public func onPayEvent(payEvent_ payEvent: String) {
        os_log("SimplePayListener event description = %{public}@", fivestarsPayEvent.description)

        let appceleratorCallback:KrollCallback = self.payEventListener as! KrollCallback
        
        appceleratorCallback.call([payEvent], thisObject: self.payEventListener)
    }
}