When using Swift 3 and XCode 8.x and Core Data I had the following problems with NSPredicate.

First I wrote something like this:
let uuid = UUID(uuid_string: a_string_with_uuid)
let fetch: NSFetchRequest<UserMO> = UserMO.fetchRequest()
fetch_user_request.predicate = NSPredicate(format: "uuid = %@", uuid)
let users = try! managedObjectContext!.fetch(fetch_user_request)

That didn’t work and compiled with error message:
Argument type 'UUID' does not conform to expected type 'CVarArg'
Some googling found me a possible solution, namely that for swift it was better to use:

init(format predicateFormat: String, argumentArray arguments: [Any]?)
over what I had implicitly used:
init(format predicateFormat: String, arguments argList: CVaListPointer)

I changed my code into the following:
let uuid = UUID(uuid_string: a_string_with_uuid)
let fetch: NSFetchRequest<UserMO> = UserMO.fetchRequest()
fetch_user_request.predicate = NSPredicate(format: "uuid = %@", [uuid])
let users = try! managedObjectContext!.fetch(fetch_user_request)

This removed the compilation error message, BUT the resulting executable did not do what I expected. The query returned an empty results independently of me trying various other parameters to match, e.g. display_name. Instead, the predicate evaluation seemed to fail silently.

As it turns out, the correct way to invoke the NSPredicate initializer with Swift 3 was to have explicit labels for both arguments like below NOTE: the added argument label argumentArray::

let uuid = UUID(uuid_string: a_string_with_uuid)
let fetch: NSFetchRequest<UserMO> = UserMO.fetchRequest()
fetch_user_request.predicate = NSPredicate(format: "uuid = %@", argumentArray: [internally_identified_by])
let users = try! managedObjectContext!.fetch(fetch_user_request)

Hopefully, this might save someone else a minute or two..