Comment get un (des) numéro (s) de téléphone CNContact sous forme de string dans Swift?

Je tente de récupérer les noms et numéros de téléphone de tous les contacts et les mettre dans des arrays avec Swift dans iOS. Je l'ai fait jusqu'ici:

func findContacts() -> [CNContact] { marrContactsNumber.removeAllObjects() marrContactsName.removeAllObjects() let store = CNContactStore() let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey] let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch) var contacts = [CNContact]() do { try store.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (let contact, let stop) -> Void in contacts.append(contact) self.marrContactsName.addObject(contact.givenName + " " + contact.familyName) self.marrContactsNumber.addObject(contact.phoneNumbers) print(contact.phoneNumbers) } catch let error as NSError { print(error.localizedDescription) } print(marrContactsName.count) print(marrContactsNumber.count) return contacts } 

Une fois terminé, marrContactsName contient un tableau de tous les noms de mes contacts exactement comme prévu. c'est à dire "John Doe". Cependant, marrContactsNumber renvoie un tableau de valeurs comme

 [<CNLabeledValue: 0x158a19950: identifier=F831DC7E-5896-420F-AE46-489F6C14DA6E, label=_$!<Work>!$_, value=<CNPhoneNumber: 0x158a19640: countryCode=us, digits=6751420000>>, <CNLabeledValue: 0x158a19a80: identifier=ECD66568-C6DD-441D-9448-BDEDDE9A68E1, label=_$!<Work>!$_, value=<CNPhoneNumber: 0x158a199b0: countryCode=us, digits=5342766455>>] 

Je voudrais savoir comment récupérer juste le (s) numéro (s) de téléphone en tant que valeur (s) de string, c.-à-d. "XXXXXXXXXX". Fondamentalement, comment appeler la valeur digit (s). Merci!

J'ai trouvé la solution: (contact.phoneNumbers[0].value as! CNPhoneNumber).valueForKey("digits") as! Ssortingng (contact.phoneNumbers[0].value as! CNPhoneNumber).valueForKey("digits") as! Ssortingng

vous pouvez get contact.phoneNumbers de CNLabeledValue :

 for phoneNumber in contact.phoneNumbers { if let number = phoneNumber.value as? CNPhoneNumber, let label = phoneNumber.label { let localizedLabel = CNLabeledValue.localizedSsortingngForLabel(label) print("\(localizedLabel) \(number.ssortingngValue)") } } 
 /* Get only first mobile number */ let MobNumVar = (contact.phoneNumbers[0].value as! CNPhoneNumber).valueForKey("digits") as! Ssortingng print(MobNumVar) /* Get all mobile number */ for ContctNumVar: CNLabeledValue in contact.phoneNumbers { let MobNumVar = (ContctNumVar.value as! CNPhoneNumber).valueForKey("digits") as? Ssortingng print(MobNumVar!) } /* Get mobile number with mobile country code */ for ContctNumVar: CNLabeledValue in contact.phoneNumbers { let FulMobNumVar = ContctNumVar.value as! CNPhoneNumber let MccNamVar = FulMobNumVar.valueForKey("countryCode") as? Ssortingng let MobNumVar = FulMobNumVar.valueForKey("digits") as? Ssortingng print(MccNamVar!) print(MobNumVar!) } 

La définition d'un CNLabeledValue :

La class CNLabeledValue est une class thread-safe qui définit un object de valeur immutable qui combine une valeur de propriété de contact avec une label. Par exemple, un numéro de téléphone de contact pourrait avoir une label de Home, Work, iPhone, etc.

CNContact.phoneNumbers est un tableau de CNLabeledValues ​​et chaque CNLabeledValue a un label et une valeur.

Pour imprimer les numéros de téléphone correspondant à un contact CNC, vous pouvez essayer:

 for phoneNumber in contact.phoneNumbers { print("The \(phoneNumber.label) number of \(contact.givenName) is: \(phoneNumber.value)") } 

En 3 rapide, vous pouvez get directement

  if item.isKeyAvailable(CNContactPhoneNumbersKey){ let phoneNOs=item.phoneNumbers let phNo:Ssortingng for item in phoneNOs{ print("Phone Nos \(item.value.ssortingngValue)") } 

Swift 3 "_$!<Mobile>!$_" Cet article est écrit pour créer de la différence tout en mettant une occasion de s'appuyer sur diverses options.

 for con in contacts { for num in con.phoneNumbers { if num.label == "_$!<Mobile>!$_" //Please Don't Change this! { self.contactNames.append(con.givenName) self.contactNums.append(num.value.ssortingngValue) break } else { continue } } } 

Ici, nous avons num.value.ssortingngValue