【问题标题】:JavaScriptCore call function with callback Swift带有回调 Swift 的 JavaScriptCore 调用函数
【发布时间】:2016-01-13 17:58:19
【问题描述】:

我试图用来自 Swift 的回调调用一个 Javascript 函数,但我没有让它工作。

我拥有的是:

Javascript:

        global.calculateWithCb = function(temp,cb){
            cb(5 * temp)
        }

        global.calculate = function(temp) {
            return 5 * temp
        }

斯威夫特:

        let context = JSContext()
        let scriptURL =        NSURL(fileURLWithPath: String("XXX/bundle.js"))
        let script : String = try String(contentsOfURL:scriptURL, encoding: NSUTF8StringEncoding)

        var jsSource: String! = script
        jsSource = "var window = this; \(jsSource)"
        context.evaluateScript(jsSource)

        let calculate = context.objectForKeyedSubscript("calculate")
        let output = calculate.callWithArguments([40]).toNumber()

所以计算函数按预期工作,但我真的不知道如何将块作为回调参数传递。我在网上搜索了很多,但我没有找到任何提示,也许有人可以指出我正确的方向?

【问题讨论】:

标签: javascript ios swift callback javascriptcore


【解决方案1】:

在作为参数调用之前,您需要使用 @convention(block) swift 块手动初始化 JSValue。

let testBlock : @convention(block) (JSValue?) -> Void = { calledBackValue in
    print("calledBackValue:", calledBackValue)
}
let callback = JSValue.init(object: testBlock, in: context)
// ...
jsFunctionToCallWithCallback.call(withArguments: [42, callback])
var theJSFunction = function(val, callback) {
    // Do smt...
    callback(val);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多