2017-03-02 8 views
0

저는 Swift에 Bitcoin 관련 앱을 쓰고 있습니다. BIP32/39 용 네이티브 라이브러리가 없으므로 JavaScriptCore를 사용하여 js 라이브러리로 이동하기로 결정했습니다.JavaScriptCore가 'hello, world'이외의 다른 기능을 수행하지 않습니다.

var pip_buffer = new Uint8Array(strength/8); 

이 하나가 작동 :

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

어떻게 만들 :

여기 내 스위프트 코드의
var pip_buffer = "Hello, world" 

이 문제는 거의 모든 출력 스위프트의 undefined, 예를 들어

입니다 이게 효과가 있니?

답변

0

JSValue API Doc에서 보겠습니다. Uint8Array에 대한 참조가 표시되지 않습니다. 이는 JavaScriptCore가 Uint8Array을 '신속한'값으로 변환 할 수 없음을 의미합니다.

JS 쪽에서 Array.from(pip_buffer)을 사용하면 Uint8Array을 정상적인 숫자 배열로 변환 할 수 있습니다.

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

일단 또한 배열로 얻기 위해 JSValue.toArray() (SWIFT 측)을 사용할 수있다 (또한 어레이의 각 항목에 대해, toNumber(), toInt32() 또는 toUInt32() 사용 가능), 일반 JS 수 어레이 변환.