【发布时间】:2017-01-24 11:13:59
【问题描述】:
是否可以从 Javascript 调用 Swift 函数/回调? 在 Android 中可以使用 JavaVoidCallbacks,在 Swift 中有类似的东西吗?现在我使用 JavaScriptCore,我可以从 Swift 调用 javascript 函数。
【问题讨论】:
标签: javascript swift callback
是否可以从 Javascript 调用 Swift 函数/回调? 在 Android 中可以使用 JavaVoidCallbacks,在 Swift 中有类似的东西吗?现在我使用 JavaScriptCore,我可以从 Swift 调用 javascript 函数。
【问题讨论】:
标签: javascript swift callback
是的,你可以。
请参考本教程:https://www.raywenderlich.com/124075/javascriptcore-tutorial
您对“暴露本机代码”段落感兴趣
在obj-c中很简单。您只需将 jsContext 用作普通字典即可。
context[@"functionName"] = ^ <#returnType#> (<#parameters#>) {
<#Your code#>
}
希望对您有所帮助。
【讨论】:
在 Swift 中,我发现的最简单的方法是在 Javascript 中创建一个网关对象,例如使用evaluateScript(),然后向该对象添加函数:
// 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] 作为参数和/或返回类型。
【讨论】: