我正在尝试编写一个谓词来检查我设置的字典中的特定值。
此词典的字符串版本为“0”,“1”和“2”作为我想要访问的键。
我想写的谓词是:
$ player.currencyDictionaries.0.earned> 1000
问题是不允许使用.0。假设我无法轻易更改字典存储值的方式(这是旧版本,我想在服务器上托管所有版本时使用相同的谓词)有没有办法访问数据?
答案 0 :(得分:2)
$player.currencyDictionaries[0].earned > 1000
(您可能需要执行['0']
以保证传递的值是字符串而不是数字)
请注意,此语法([0]
)仅在谓词格式字符串中有效。它不适用于关键路径。
此语法在Predicate BNF的“Index Expression”部分下定义。
修改强>
实际上,这不起作用,原因如下:
将读取字符串"$player.currencyDictionaries[0].earned"
并将其转换为NSExpression
类型NSKeyPathExpression
。这意味着,当它被评估时,它将基本上采用该字符串并通过接收者的-valueForKeyPath:
方法运行它。正如我上面提到的,括号语法不适用于键路径,因此会产生错误的答案。
但是,由于您知道currencyDictionaries
返回NSDictionary
,而NSDictionary
overrides the -valueForKey:
method,您可以将[0]
位转换为关键路径,把它变成文字字符串:
$player.currencyDictionaries.'0'.earned