У меня есть атрибут типа, BOOL
и я хочу выполнить поиск всех управляемых объектов, в которых находится этот атрибут YES
.
Для строковых атрибутов это просто. Я создаю такой предикат:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
Но как мне это сделать, если у меня есть атрибут bool с именем selected и я хочу создать для него предикат? Могу я сделать что-нибудь подобное?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
Или мне нужны другие спецификаторы формата и просто передать YES
?
Swift 4.0
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
источник
nil
значениями атрибутов будут найдены. Например, установите для атрибута значениеnil
(мы скажем, что вы назвали его так,boolAttribute
как показано в этом ответе). Затем создать предикат:let predicate = NSPredicate(format: "boolAttribute == %@", boolValue)
. Примечание:boolValue
должно быть равноtrue
илиfalse
, НЕNSNumber(value: boolValue)
. Полученный предикат будет:boolAttribute == nil
. Этот предикат будет возвращать какие - либо объекты , гдеboolAttribute
являетсяnil
. Может не работать вечно ...Не конвертируйте в NSNumber и не используйте двойной "=="
Более подходит для Swift> = 4:
NSPredicate(format: "boolAttribute = %d", true)
Примечание. "True" в этом примере - это Bool (Struct).
источник
Swift 3
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
В Swift 3 вы должны использовать
NSNumber(value: true)
.Использование
NSNumber(booleanLiteral: true)
и вообще любого буквального инициализатора напрямую не рекомендуется, и, например, SwiftLint (v. 0.16.1) будет генерировать предупреждение для использованияExpressibleBy...Literal
инициализатора напрямую:источник
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)
источник
Swift 3.0 внес в это небольшое изменение:
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(booleanLiteral: true))
источник