【问题标题】:JavaScriptCore evaluateScript cannot handle objects?JavaScriptCore evaluateScript 不能处理对象?
【发布时间】:2020-07-06 18:17:57
【问题描述】:

我正在使用 JSContext 和 JavaScriptCore 的其余部分。谁能向我解释为什么 evaluateScript 在第二个断言中失败了?

let context = JSContext()!
let obj1    = context.evaluateScript("[{ 'first': 'Grace', 'last': 'Hopper', 'year': 1906 }]")
assert(obj1?.isArray ?? false)
let obj2    = context.evaluateScript(" { 'first': 'Grace', 'last': 'Hopper', 'year': 1906 } ")
assert(obj2?.isObject ?? false)

为什么将对象包装在数组中有效,但原始对象无效?

【问题讨论】:

  • 当一个语句以{ 开头时,它被认为是一个块语句,而不是一个对象初始化器。

标签: javascript ios swift iphone javascriptcore


【解决方案1】:

正如Pointy 指出的那样,以{ 开头的脚本正在评估为一个块,而不是一个对象。这是目前的解决方法:

let obj2 = context.evaluateScript("[{ 'first': 'Grace', 'last': 'Hopper', 'year': 1906 }]")
assert(obj2?.objectAtIndexedSubscript(0)?.isObject ?? false)

基本上将它包装在一个数组中,然后打开第一个对象。工作正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    相关资源
    最近更新 更多