¿Cómo get solo numbers mobilees en Swift usando CNContacts?

Tengo un código para recuperar todos los numbers de teléfono en los contactos de los usuarios, pero me gustaría filtrar solo los numbers de teléfono mobile. Actualmente, estoy haciendo esto simplemente agregando numbers con un primer dígito de "+" o el segundo dígito de "7" a una matriz, como se muestra a continuación:

func findContacts () -> [CNContact]{ let keysToFetch = [CNContactFormatter.descriptorForRequinetworkingKeysForStyle(.FullName),CNContactPhoneNumbersKey] let fetchRequest: CNContactFetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch) var contacts = [CNContact]() CNContact.localizedStringForKey(CNLabelPhoneNumberiPhone) fetchRequest.mutableObjects = false fetchRequest.unifyResults = true fetchRequest.sortOrder = .UserDefault let contactStoreID = CNContactStore().defaultContainerIdentifier() do { try CNContactStore( ).enumerateContactsWithFetchRequest(fetchRequest) { (let contact, let stop) -> Void in if contact.phoneNumbers.count > 0 { contacts.append(contact) } if (contact.isKeyAvailable(CNContactPhoneNumbersKey)) { for phoneNumber:CNLabeledValue in contact.phoneNumbers { let number = phoneNumber.value as! CNPhoneNumber print(number.stringValue) let index = number.stringValue.startIndex.advancedBy(1) let indexPlus = number.stringValue.startIndex.advancedBy(0) if number.stringValue[index] == Character(String(7)) || number.stringValue[indexPlus] == Character("+"){ self.allNumbers.append("\(number.stringValue)") } } } } 

Dado que los contactos se almacenan en un iPhone con una label "mobile", me preguntaba si podrían agregarse estos numbers a la matriz. Gracias 🙂

Verifica si la label del número es mobile como esta:

 var mobiles = [CNPhoneNumber]() for num in contact.phoneNumbers { let numVal = num.value as! CNPhoneNumber if num.label == CNLabelPhoneNumberMobile { mobiles.append(numVal) } } 

Luego, tiene una serie de numbers de teléfono mobile para esa persona.

Una mejor forma de hacerlo se menciona en esta publicación donde se usa flatMap y contains . ¿Optimización rápida del filter nested?

Otro método para más visitantes:

 for con in contacts { for num in con.phoneNumbers { if num.label == "_$!<Mobile>!$_" { self.contactNames.append(con.givenName) self.contactNums.append(num.value.stringValue) break } else { continue } } }