Ich habe ein Attribut vom Typ BOOL
und möchte eine Suche nach allen verwalteten Objekten durchführen, in denen sich dieses Attribut befindet YES
.
Für Zeichenfolgenattribute ist dies unkompliziert. Ich erstelle ein Prädikat wie folgt:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
Aber wie mache ich das, wenn ich ein Bool-Attribut namens selected habe und ein Prädikat dafür erstellen möchte? Könnte ich so etwas einfach machen?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
Oder brauche ich andere Formatspezifizierer und übergebe einfach YES
?
Swift 4.0
quelle
nil
Attributwerten gefunden. Setzen Sie beispielsweise den Wert eines Attributs aufnil
(wir sagen, Sie haben esboolAttribute
wie in dieser Antwort gezeigt aufgerufen ). Erstellen Sie dann Ihr Prädikat :let predicate = NSPredicate(format: "boolAttribute == %@", boolValue)
. Hinweis:boolValue
sollte gleichtrue
oderfalse
NICHT seinNSNumber(value: boolValue)
. Das resultierende Prädikat lautet :boolAttribute == nil
. Dieses Prädikat gibt alle Objekte zurück, wo esboolAttribute
istnil
.Konvertieren Sie nicht in NSNumber und verwenden Sie kein doppeltes "=="
Besser geeignet für Swift> = 4:
Hinweis: "true" in diesem Beispiel ist ein Bool (eine Struktur)
quelle
Swift 3
In Swift 3 sollten Sie verwenden
NSNumber(value: true)
.Von der
NSNumber(booleanLiteral: true)
direkten Verwendung eines Literal-Initialisierers und im Allgemeinen wird davon abgeraten, und beispielsweise generiert SwiftLint (Version 0.16.1) eine Warnung für denExpressibleBy...Literal
direkten Verwendungsinitialisierer:quelle
NSPredicate(format: "boolAttribute == %@", true as NSNumber)
Swift 4
Swift 3
quelle
Swift 3.0 hat dies geringfügig geändert:
quelle