Cómo usar predicados con fetchRequest en Core Data

Paso un Identificador de contacto del controlador de vista de tabla de Contactos a otro controlador de vista de tabla de Ubicación. Así que defino un delegado ContactSelectionDelegate e implemento el método userSelectedContact en el controlador de vista de tabla de ubicación y obtengo contactIdentifierString

Estoy buscando en la base de datos para encontrar una coincidencia para contactIdentifierString y encontrar el valor para otro nombre de proveedor de atributos. Esto implica buscar en toda la base de datos. ¿Existe una forma más rápida asignando un predicado al contexto fetchRequest? Pensé que sería más rápido y menos líneas de código.

¿Alguien puede sugerir cómo usar predicados con contact fetchRequest?

Código ContactTableViewController:

protocol ContactSelectionDelegate{
func userSelectedContact(contactIdentifier:NSString)
}

class ContactTableViewController: UITableViewController {

var delegate:ContactSelectionDelegate? = nil

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    if (delegate != nil){
        let contactDict:NSDictionary = allContacts.object(at: indexPath.row) as! NSDictionary
        let identifier = contactDict.object(forKey: "uniqueId")
                   delegate!.userSelectedContact(contactIdentifier: identifier as! NSString)
                  self.navigationController!.popViewController(animated: true)
               }
}

}

Código LocationTableViewController:

 class LocationTableViewController: UITableViewController, ContactSelectionDelegate, CLLocationManagerDelegate {

var contactIdentifierString:NSString = NSString()

 func userSelectedContact(contactIdentifier: NSString) {
    var fetchedResults: [Contact] = []

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    do {
        fetchedResults = try context.fetch(Contact.fetchRequest())
    }
    catch {
        print ("fetch task failed")
    }
    if fetchedResults.count > 0 {
        for contact in fetchedResults{
            let aContact:Contact = contact
            if (aContact.uniqueId! == contactIdentifierString as String) {
                providerName.text = aContact.providerName
            }
            else {
                continue
            }
        }
    }


}

Respuestas a la pregunta(1)

Su respuesta a la pregunta