您如何访问 swift 中的 KrollCallback?

How do you access a KrollCallback in swift?

我已经实现了一个自定义框架,并且它被集成到一个启用了 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

Swift代码:

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

如何在此对象上调用方法,以便我可以 return 来自 swift 的结果返回 javascript?

我能够通过在本地构建 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)
    }
}