Ios JavaScriptCore没有';除了',我什么也不干;你好,世界';

Ios JavaScriptCore没有';除了',我什么也不干;你好,世界';,ios,swift,cocoa-touch,javascriptcore,Ios,Swift,Cocoa Touch,Javascriptcore,我目前正在用Swift编写一个与比特币相关的应用程序。由于没有适用于BIP32/39的本机库,我决定使用JavaScriptCore使用js库 问题是,在Swift中,几乎所有内容都输出未定义的,例如: var pip_buffer = new Uint8Array(strength / 8); 这一个有效: var pip_buffer = "Hello, world" 这是我的Swift代码: var context: JSContext? private func initJS()

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

问题是,在Swift中,几乎所有内容都输出
未定义的
,例如:

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")
}
如何使它工作?

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

您可以在JS端使用
Array.from(pip\u buffer)
Uint8Array
转换为常规数字数组,这很有效

e、 g

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

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