Eu tenho um atributo do tipo BOOL
e quero realizar uma pesquisa para todos os objetos gerenciados onde este atributo está YES
.
Para atributos de string, é direto. Eu crio um predicado como este:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
Mas como faço isso, se tenho um atributo bool chamado selecionado e quero fazer um predicado para isso? Eu poderia fazer algo assim?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
Ou eu preciso de outros especificadores de formato e apenas passar YES
?
Swift 4.0
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
fonte
nil
valores de atributo serão encontrados. Por exemplo, defina o valor de um atributo comonil
(diremos que você o chamouboolAttribute
conforme mostrado nesta resposta). Em seguida, crie o seu predicado:let predicate = NSPredicate(format: "boolAttribute == %@", boolValue)
. Nota:boolValue
deve ser igual atrue
oufalse
NÃONSNumber(value: boolValue)
. O predicado resultante será:boolAttribute == nil
. Esse predicado irá devolver quaisquer objetos ondeboolAttribute
énil
. Pode não funcionar para sempre ...Não converta para NSNumber, nem use double "=="
Mais apropriado para Swift> = 4:
NSPredicate(format: "boolAttribute = %d", true)
Nota: "verdadeiro" neste exemplo é um Bool (um Struct)
fonte
Swift 3
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Em Swift 3 você deve usar
NSNumber(value: true)
.Usar
NSNumber(booleanLiteral: true)
e em geral qualquer inicializador literal diretamente é desencorajado e, por exemplo, SwiftLint (v. 0.16.1) irá gerar um aviso para oExpressibleBy...Literal
inicializador de uso diretamente:fonte
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)
fonte
O Swift 3.0 fez uma pequena mudança nisso:
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(booleanLiteral: true))
fonte