在 NSPredicate 中结合两个条件

Posted

技术标签:

【中文标题】在 NSPredicate 中结合两个条件【英文标题】:Combining Two Conditions in NSPredicate 【发布时间】:2015-10-24 17:17:02 【问题描述】:

你如何结合NSPredicate中的两个条件?我正在使用以下语句,我想添加另一个条件,使用 AND 将密码与文本字段的内容进行比较:

request.predicate = NSPredicate(format: "username = %@", txtUserName.text!)

【问题讨论】:

【参考方案1】:

如前所述,您可以使用“AND”、“OR”等逻辑运算符 在谓词中。详情可在 Predicate Format String Syntax 在“谓词编程指南”中。

作为替代,使用“复合谓词”:

let p1 = NSPredicate(format: "username = %@", "user")
let p2 = NSPredicate(format: "password = %@", "password")
let predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [p1, p2])

这对于更复杂的表达式很有用,或者如果您想构建 运行时动态的谓词。

【讨论】:

如果我需要 OR 条件怎么办? @Jan: orPredicateWithSubpredicates ? 如果两者都需要类似 NSPredicate(format: "(username = %@ AND password = %@)) OR (email = %@ AND password = %@) ", usernameAndEmail, txtPassword.text 怎么办? !,usernameAndEmail, txtPassword.text!) @John:您可以使用“AND”和“OR”编写单个谓词,或者使用 andPredicateWithSubpredicates/orPredicateWithSubpredicates 组合简单的谓词——这两种方法都可以。【参考方案2】:

试试这个

request.predicate = NSPredicate(format: "username = %@ AND password = %@", txtUserName.text!, txtPassword.text!)

【讨论】:

【参考方案3】:

AND 正是你所需要的

request.predicate = NSPredicate(format: "username = %@ AND password = %@", txtUserName.text!, txtPassWord.text!)

【讨论】:

以上是关于在 NSPredicate 中结合两个条件的主要内容,如果未能解决你的问题,请参考以下文章

一对多关系 iPhone - NSPredicate 核心数据查询

NSPredicate - 使用两个条件进行评估

NSPredicate 和 BEGINSWITH with CloudKit:字段值类型不匹配

使用 ANY 和两个条件创建 NSPredicate

使用 NSPredicate 查询 CloudKit 以获取空白(或 null 或其他)的日期

谓词 NSPredicate