【问题标题】:Calling swift Code From Javascript从 Javascript 调用 swift 代码
【发布时间】:2017-01-24 11:13:59
【问题描述】:

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

【问题讨论】:

    标签: javascript swift callback


    【解决方案1】:

    是的,你可以。

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

    您对“暴露本机代码”段落感兴趣

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

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

    希望对您有所帮助。

    【讨论】:

    • 谢谢,但我如何从 JavaScript 调用 swift 函数?可以说我有一个功能可以让我迅速向世界打招呼。我如何从 javascript 调用这个函数
    • 如教程所述,首先创建调用此 swift 函数的块,然后将其添加到 jsContext。之后,您通常调用它,就像您通过 jsContext 调用直接在 javascript 中定义的函数一样。
    【解决方案2】:

    在 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] 作为参数和/或返回类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      相关资源
      最近更新 更多