NSPredicate 中的不一致

Inconsistencies in NSPredicate

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

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

但不是这个:

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

还有这个:

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

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

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

来自 Predicate Format String Syntax 在 "Predicate Programming Guide":

Single or double quoting variables ... cause %@, %K, or $variable to be interpreted as a literal in the format string and so prevent any substitution.

所以在你的第二个谓词中,你比较 "company" 属性 针对文字字符串 "%@":

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)