0

我已经实现了一个自定义框架,它被集成到一个启用超循环的项目中。

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

如何调用这个对象的方法,以便我可以将结果从 swift 返回到 javascript?

4

1 回答 1

0

我可以通过在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)
    }
}
于 2020-09-24T20:29:23.863 回答