ios - 将自定义 swift 对象作为输入传递给 javascript 方法

标签 ios swift javascriptcore

我正在使用 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 协议(protocol)

您也可以尝试其他方式,如 http://nshipster.com/javascriptcore/ 中所述。 .

希望这能回答您的问题吗?

关于ios - 将自定义 swift 对象作为输入传递给 javascript 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38321300/

相关文章:

ios - 将 Firebase 值发送到文本字段

objective-c - 这应该自动发布吗?或者有没有办法手动完成?

ios - 为什么我在 Xcode 7 : Bridging Header does not exsist? 中的桥接头中不断收到此错误

javascript - 在WebKit/JavaScriptCore中获取Javascript的返回值

ios - SwiftSpinner 在调用 API 时遇到问题 - swift ios

ios - 如何在继续之前等待功能完成

操纵网页的 iOS 共享扩展

swift - 使物理体在物体上具有一定的尺寸和位置。(SpriteKit)

JavaScriptCore -- 将函数作为参数传递给 ObjC

ios - JavaScriptCore 除了 'hello, world' 之外不工作