在NSPredicate中组合两个条件

35
如何在NSPredicate中组合两个条件?我正在使用以下语句,并希望添加另一个条件,该条件使用AND将密码与文本字段的内容进行比较:
如何在NSPredicate中组合两个条件?我正在使用以下语句,现在想要增加一个条件,使用AND将密码和文本框的内容进行比较:
request.predicate = NSPredicate(format: "username = %@", txtUserName.text!)
3个回答

66

正如之前所述,您可以在谓词中使用逻辑运算符,例如“AND”、“OR”。有关详细信息,请参见“Predicate Programming Guide”中的Predicate Format String Syntax

作为替代方案,可以使用“复合谓词”:

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

如果你想在运行时动态构建谓词,或处理更加复杂的表达式,那么这非常有用。


1
如果我需要 OR 条件怎么办? - Jan
5
orPredicateWithSubpredicates 是一个用于构建复合谓词的方法,可以将多个子谓词组合为一个大的 OR 谓词。 - Martin R
如果两者都需要类似于NSPredicate(格式:“(用户名=%@和密码=%@)OR(电子邮件=%@和密码=%@)”,usernameAndEmail,txtPassword.text!,usernameAndEmail,txtPassword.text!),会怎样? - John
@John:你可以使用“AND”和“OR”编写单个谓词,或者使用andPredicateWithSubpredicates/orPredicateWithSubpredicates组合简单的谓词 - 这两种方法都可以。 - Martin R

42

试一试

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

1
"AND是你所需要的"
request.predicate = NSPredicate(format: "username = %@ AND password = %@", txtUserName.text!, txtPassWord.text!)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接