我正在使用 javascriptcore 框架与 JS 文件函数进行交互。 我有以下类型的对象
class Test: NSObject {
var testId: NSNumber?
var testIndex: Int?
var testDate: NSDate?
var title: String?
var status: String?
}
我正在创建对象数组并作为输入传递给 JavaScript 方法,如下所示
var testArray = [Test]()
for i in 0 ..< 4 {
let test = Test()
test.testId = i * 3
test.testIndex = i
test.testDate = NSDate()
test.title = "Test \(i)"
test.status = "waiting"
testArray.append(test)
}
我必须将此数组传递给JS方法,请告诉我如何传递它。
您应该能够将属性传递给 JS,如下所述: http://nshipster.com/javascriptcore/
街区路
现在无法在没有 Mac 的情况下测试代码,但也许可以工作:
let testArrayCount: @convention(block) Void -> String = {
return testArray.count
}
let transferTest: @convention(block) String -> (String, String, String, String, String) = {
i in
return ( String(testArray[i].0),String(testArray[i].1),String(testArray[i].2),testArray[i].3,testArray[i].4 )
}
context.setObject(unsafeBitCast(testArrayCount, AnyObject.self), forKeyedSubscript: "testArrayCount")
context.setObject(unsafeBitCast(transferTest, AnyObject.self), forKeyedSubscript: "transferTest")
现在您可以在 JS 代码中读取数组(现在是伪代码):
var jsTestArray;
for ( i=0, i<testArrayCount(), i++ ) {
jsTestArray.append( transferTest(i) );
}
将一个又一个的对象加载到 JavaScript 中后,您应该能够使用该数组。如果你不想只使用字符串,你可能必须将这些东西转回来(但作为 JS 菜鸟,我不认为这是必要的)
使用 JSExport 协议
您也可以尝试其他方式,如 http://nshipster.com/javascriptcore/ 中所述。
希望这回答了您的问题?