#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)
}
}