J'ai un attribut de type BOOL
et je souhaite effectuer une recherche pour tous les objets gérés où se trouve cet attribut YES
.
Pour les attributs de chaîne, c'est simple. Je crée un prédicat comme celui-ci:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
Mais comment faire cela, si j'ai un attribut booléen appelé selected et que je veux créer un prédicat pour cela? Puis-je simplement faire quelque chose comme ça?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
Ou ai-je besoin d'autres spécificateurs de format et juste passer YES
?
Swift 4.0
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
la source
nil
valeurs d'attribut seront trouvés. Par exemple, définissez la valeur d'un attribut surnil
(nous dirons que vous l'avez appeléboolAttribute
comme indiqué dans cette réponse). Ensuite, créez votre prédicat:let predicate = NSPredicate(format: "boolAttribute == %@", boolValue)
. Remarque:boolValue
doit être égal àtrue
oufalse
, PASNSNumber(value: boolValue)
. Le prédicat résultant sera:boolAttribute == nil
. Ce prédicat va retourner tous les objets oùboolAttribute
estnil
. Might not work forever ...Ne pas convertir en NSNumber, ni utiliser le double "=="
Plus approprié pour Swift> = 4:
NSPredicate(format: "boolAttribute = %d", true)
Remarque: "true" dans cet exemple est un Bool (un Struct)
la source
Swift 3
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Dans Swift 3, vous devez utiliser
NSNumber(value: true)
.L'utilisation
NSNumber(booleanLiteral: true)
et en général de tout initialiseur littéral directement est déconseillée et par exemple SwiftLint (v. 0.16.1) générera un avertissement pour l'ExpressibleBy...Literal
initialiseur d' utilisation directement:la source
NSPredicate(format: "boolAttribute == %@", true as NSNumber)
Swift 4
request.predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Swift 3
request.predicate = NSPredicate(format: "field = %@", value as CVarArg)
la source
Swift 3.0 a apporté une légère modification à ceci:
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(booleanLiteral: true))
la source