Saya memiliki atribut tipe BOOL
dan saya ingin melakukan pencarian untuk semua objek yang dikelola di mana atribut ini berada YES
.
Untuk atribut string itu sangat mudah. Saya membuat predikat seperti ini:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
Tetapi bagaimana saya melakukan ini, jika saya memiliki atribut bool yang disebut selected dan saya ingin membuat predikat untuk ini? Bisakah saya melakukan sesuatu seperti ini?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
Atau apakah saya memerlukan penentu format lain dan lulus begitu saja YES
?
Swift 4.0.0
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
sumber
nil
nilai atribut akan ditemukan. Misalnya, setel nilai atribut kenil
(kami akan mengatakan Anda menyebutnyaboolAttribute
seperti yang ditunjukkan dalam jawaban ini). Kemudian, buat predikat Anda:let predicate = NSPredicate(format: "boolAttribute == %@", boolValue)
. Catatan:boolValue
harus samatrue
ataufalse
, TIDAKNSNumber(value: boolValue)
. Predikat yang dihasilkan akan:boolAttribute == nil
. Predikat itu akan mengembalikan objek manaboolAttribute
punnil
. Mungkin tidak akan bekerja selamanya ...Jangan mengonversi ke NSNumber, atau gunakan ganda "=="
Lebih sesuai untuk Swift> = 4:
NSPredicate(format: "boolAttribute = %d", true)
Catatan: "true" dalam contoh ini adalah Bool (a Struct)
sumber
Cepat 3
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Di Swift 3 Anda harus menggunakan
NSNumber(value: true)
.Penggunaan
NSNumber(booleanLiteral: true)
dan secara umum inisialisasi literal secara langsung tidak dianjurkan dan misalnya SwiftLint (v. 0.16.1) akan menghasilkan peringatan untukExpressibleBy...Literal
penginisialisasi penggunaan secara langsung:sumber
NSPredicate(format: "boolAttribute == %@", true as NSNumber)
Cepat 4
request.predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(value: true))
Cepat 3
request.predicate = NSPredicate(format: "field = %@", value as CVarArg)
sumber
Swift 3.0 telah membuat sedikit perubahan pada ini:
let predicate = NSPredicate(format: "boolAttribute == %@", NSNumber(booleanLiteral: true))
sumber