【问题标题】:Passing custom swift object to javascript methods as input将自定义 swift 对象作为输入传递给 javascript 方法
【发布时间】:2016-07-12 06:18:12
【问题描述】:

我正在使用 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的方法,请告诉我如何传递它。

【问题讨论】:

    标签: ios swift javascriptcore


    【解决方案1】:

    您应该能够将属性传递给 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 noob,我不认为这是必要的)

    使用 JSExport 协议

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

    希望,这回答了你的问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多