After the Xcode 9.3 update, I've noticed that if you want to have Predicate like this:
let predicate = NSPredicate(format: "preferred = %@", true as CVarArg)
You have a crash. But in Xcode 9.2 this wasn't a problem. Any idea?
// Solution 3 [ Apple Documentation ]
let predicate = NSPredicate(format: "preferred == TRUE")
The exception occurs because true
is not an object ( %@
). You need the %d
placeholder
let predicate = NSPredicate(format: "preferred = %d", true)
After a bit of investigation, I've discovered how to fix this. In short:
// Solution 1 [ NSNumber ]
let bool = NSNumber(booleanLiteral: true)
let predicate = NSPredicate(format: "preferred = %@", bool as CVarArg)
// Solution 2 [ Bool ] (static example)
let predicate = NSPredicate(format: "preferred == YES")
As also explained here , it's simply better to deal with Obj-C type instead of Swift type when we have to deal with this kind of methods.
我认为您也可以使用此:
NSPredicate(format: "preferred = true")
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.