0

如何修改作为参数传递给在 JSContext 中执行的 javascript 的 swift 对象

我正在玩 JSCore 并声明了一个 testClass,我正在制作这个类的一个实例,然后调用一个 javascript 函数,将我的实例作为参数传递

import JavaScriptCore
import Foundation

let jsVM = JSVirtualMachine()
let jsContext = JSContext(virtualMachine: jsVM!)

@objc public protocol testJSExports : JSExport {
  var number: NSNumber? {get set}
}

@objc(testClass) class testClass : NSObject, testJSExports {
  public dynamic var number: NSNumber?
}

jsContext?.evaluateScript("""
  function modifyNumber(testInstance) {
  testInstance.number = -2
}
""")

let jsFunction = jsContext?.objectForKeyedSubscript("modifyNumber")

var testInstance = testClass()
testInstance.number = 11

jsFunction?.call(withArguments: [testInstance as Any])
print(testInstance.number) // would expect to print -2, actually prints 11

我希望最后一个打印语句的输出为 -2,但原始值 11 仍然存在。是否可以在 javascript 中修改 swift 对象?

4

0 回答 0