2016-05-04 7 views
5

Ho un codice per recuperare tutti i numeri di telefono nei contatti degli utenti, ma vorrei filtrare solo i numeri di cellulare. Attualmente, sto solo facendo questo da solo l'aggiunta di numeri con una prima cifra di "+" o seconda cifra di "7" ad un array, come illustrato di seguito:Come recuperare solo i numeri di cellulare in rapido utilizzando i contatti di CNC?

func findContacts() -> [CNContact]{ 
    let keysToFetch = [CNContactFormatter.descriptorForRequiredKeysForStyle(.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)") 
        } 
       } 
      } 
     } 

Poiché i contatti sono memorizzati su un iPhone con un etichetta "mobile", mi stavo chiedendo se solo questi numeri potrebbero essere aggiunti alla matrice. Grazie :)

risposta

6

Verificare che l'etichetta del numero di cellulare è simile a questo:

var mobiles = [CNPhoneNumber]() 

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

Poi si hanno una serie di numeri di cellulare per quella persona.

+2

Non hardcode ' "mobile"'. Utilizzare 'CNLabelPhoneNumberMobile' o' CNLabelPhoneNumberiPhone'. Ma tieni presente che questo non otterrà tutti i numeri di cellulare. Le persone possono usare etichette personalizzate quando aggiungono un numero di telefono. Qualcuno potrebbe effettivamente utilizzare l'etichetta "casa" per sbaglio o qualsiasi altra possibilità. Oppure un utente potrebbe utilizzare l'etichetta "mobile" su una linea di terra. Alla fine, non c'è modo di essere sicuri che un dato numero sia in realtà un numero di cellulare. – rmaddy

0

altro metodo per più visitatori:

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 
      } 
     } 

    } 
Problemi correlati