2017-03-02 106 views
0

我目前正在Swift編寫一個比特幣相關的應用程序。由於沒有用於BIP32/39的本地庫,我決定使用JavaScriptCore與js一起使用。JavaScriptCore不能工作的其他任何東西'你好,世界'

的問題是,幾乎所有的輸出undefined斯威夫特,如:

var pip_buffer = new Uint8Array(strength/8); 

這一個工程:

var pip_buffer = "Hello, world" 

這裏是我的銀行代碼:

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") 
} 

如何使這個東西有用嗎?

回答

0

看着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(),每個項目的陣列中)。