Ho un'applicazione scritta in Swift che sta inserendo i contatti degli utenti dalla loro rubrica.Swift filter array tramite NSPredicate
voglio filtrare il contatto che contengono solo un nome di società (in modo che si ottiene il "assunto" persona reale di contatto e non le imprese)
Ecco come questo viene realizzare nella versione Objective-C della mia app:
NSArray *allContacts = (__bridge_transfer NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id person, NSDictionary *bindings) {
NSString *firstName = CFBridgingRelease(ABRecordCopyValue((__bridge ABRecordRef)person, kABPersonFirstNameProperty));
NSString *lastName = CFBridgingRelease(ABRecordCopyValue((__bridge ABRecordRef)person, kABPersonLastNameProperty));
return (firstName || lastName);
}];
NSArray *peopleNotCompanies = [allContacts filteredArrayUsingPredicate:predicate];
questo funziona perfettamente, ecco il mio tentativo di fare questo in Swift:
var contactList: NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue()
var predicate: NSPredicate = NSPredicate { (AnyObject person, NSDictionary bindings) -> Bool in
var firstName: String = ABRecordCopyValue(person as ABRecordRef, kABPersonFirstNameProperty).takeRetainedValue() as String
var lastName: String = ABRecordCopyValue(person as ABRecordRef, kABPersonLastNameProperty).takeRetainedValue() as String
return firstName || lastName
})
Ora, questo ha un paio di problemi. Sto ottenendo questi errori sul istruzione return e la fine della chiamata predicato:
Come posso fornire una funzionalità simile trovato nel mio codice objC a Swift? O c'è un modo migliore per verificare se un contatto ha SOLO un nome di società e poi ometterlo dall'array finale?
Grazie!
Se si usa NSArray invece di Array, è possibile eseguire questa riga di codice: let filteredContacts: NSArray = contactList.filteredArrayUsingPredicate (predicato) –
Grazie per il chiarimento, l'extra) mi ha davvero buttato fuori perché non avevo notato esso! –