从Javascript

时间:2017-01-24 11:14:00

标签: javascript swift callback

是否可以从Javascript调用Swift函数/回调? 在Android中可以使用JavaVoidCallbacks,Swift中有类似的东西吗?现在我使用JavaScriptCore,我可以从Swift调用javascript函数。

2 个答案:

答案 0 :(得分:2)

是的,你可以。

请参阅本教程:https://www.raywenderlich.com/124075/javascriptcore-tutorial

您对“公开本地代码”

段感兴趣

在obj-c中非常简单。您只需将jsContext用作普通字典即可。

context[@"functionName"] = ^ <#returnType#> (<#parameters#>) {
    <#Your code#>
}

希望它有所帮助。

答案 1 :(得分:0)

在Swift中,我发现的最简单的方法是使用Javascript创建网关对象,例如valuateScript(),然后向该对象添加函数:

// x is JSContext
let gateway = x.objectForKeyedSubscript("gateway" as NSString)
let p: @convention(block) (Int, Double) -> () = { h, ms in
     return self.swift_method(h, ms)
}
gateway!.setObject(p, forKeyedSubscript: "swift_method" as NSString)

之后,您可以使用Javascript调用gateway.swift_method()。

大多数类型转换都是自动的。我在Lambda中使用了类型Int,Double,String和[Int]作为参数和/或返回类型。