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)
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.