gpt4 book ai didi

ios - JavaScriptCore 除了 'hello, world' 之外不工作

转载 作者:行者123 更新时间:2023-11-30 12:38:32 24 4
gpt4 key购买 nike

我目前正在用 Swift 编写一个与比特币相关的应用程序。由于没有可用的 BIP32/39 原生库,我决定使用 JavaScriptCore 来使用 js 库。

问题是,Swift 中几乎所有内容都会输出 undefined,例如:

var pip_buffer = new Uint8Array(strength / 8);

这个有效:

var pip_buffer = "Hello, world"

这是我的 Swift 代码:

var context: JSContext?

private func initJS() {
context = JSContext()
if let jsSrcPath = Bundle.main.path(forResource: "script", ofType: "js") {
do {
let jsSrcContents = try String(contentsOfFile: jsSrcPath)
_ = context?.evaluateScript(jsSrcContents)
} catch let error {
print(error.localizedDescription)
}
}
}

private func getJSVar(name: String) {
if let vb = context?.objectForKeyedSubscript(name) {
print("\(vb)")
}
}

override func viewDidLoad() {
super.viewDidLoad()
initJS()
getJSVar(name: "pip_buffer")
}

如何让这个东西发挥作用?

最佳答案

查看JSValue API Doc我没有看到任何对 Uint8Array 的引用,这可能意味着 JavaScriptCore 无法将 Uint8Array 转换为“Swift”值。

您可以在 JS 端使用 Array.from(pip_buffer) 将您的 Uint8Array 转换为常规数字数组,这是可行的。

例如

    if let vb = context?.evaluateScript("Array.from(pip_buffer)") {
print("\(vb)")
}

一旦转换为常规 JS 数字数组,您还可以使用 JSValue.toArray() (Swift 端),将其作为数组获取(也可以使用 toNumber()toInt32()toUInt32(),对于数组中的每个项目)。

关于ios - JavaScriptCore 除了 'hello, world' 之外不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42562501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com