NSPredicate的不一致

时间:2016-03-10 14:28:56

标签: ios swift nspredicate

我想知道为什么这个NSPredicate有效:

identifier

但不是这一个:

let companyPredicate = NSPredicate(format: "company = '1'")

还有这个:

let companyPredicate = NSPredicate(format: "company = '%@'", 1)

当我打印公司的价值时。输出为Optional(1)。

那么为什么第一行代码有效?

1 个答案:

答案 0 :(得分:5)

来自“谓词编程指南”中的Predicate Format String Syntax

  

单引号或双引号变量...导致%@,%K或$变量被解释为格式字符串中的文字,因此阻止任何替换。

所以在你的第二个谓词中,你比较“公司”属性 对文字字符串"%@"

let p1 = NSPredicate(format: "company = '%@'", 1)
print(p1) // company == "%@"

要与整数进行比较,请使用

let p2 = NSPredicate(format: "company = %@", NSNumber(integer: 1))
print(p2) // company == 1

let p3 = NSPredicate(format: "company = %ld", 1)