JavaScriptCore evaluateScript 不能处理对象?
Posted
技术标签:
【中文标题】JavaScriptCore evaluateScript 不能处理对象?【英文标题】:JavaScriptCore evaluateScript cannot handle objects? 【发布时间】: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)
为什么将对象包装在数组中有效,但原始对象无效?
【问题讨论】:
当一个语句以
开头时,它被认为是一个块语句,而不是一个对象初始化器。
【参考方案1】:
正如Pointy 指出的那样,以 开头的脚本正在评估为一个块,而不是一个对象。这是目前的解决方法:
let obj2 = context.evaluateScript("[ 'first': 'Grace', 'last': 'Hopper', 'year': 1906 ]")
assert(obj2?.objectAtIndexedSubscript(0)?.isObject ?? false)
基本上将它包装在一个数组中,然后打开第一个对象。工作正常
【讨论】:
以上是关于JavaScriptCore evaluateScript 不能处理对象?的主要内容,如果未能解决你的问题,请参考以下文章
Swift Playgrounds 中的 JavaScriptCore