Подтвердить что ты не робот

Как получить номер CNContact в виде строки в Swift?

Я пытаюсь получить имена и номера телефонов всех контактов и поместить их в массивы с помощью Swift в iOS. Я сделал это так далеко:

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
}

После завершения marrContactsName содержит массив всех имен моих контактов точно так, как ожидалось. т.е. "Джон Доу". Однако marrContactsNumber возвращает массив значений, например

[<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>>]

Я хотел бы знать, как получить ТОЛЬКО телефонный номер в виде строкового значения, т.е. "XXXXXXXXXX". В принципе, как вызвать значение цифры. Спасибо!

4b9b3361

Ответ 1

Я нашел решение: (contact.phoneNumbers[0].value as! CNPhoneNumber).valueForKey("digits") as! String

Ответ 2

вы можете получить contact.phoneNumbers из CNLabeledValue:

for phoneNumber in contact.phoneNumbers {
  if let number = phoneNumber.value as? CNPhoneNumber,
      let label = phoneNumber.label {
      let localizedLabel = CNLabeledValue.localizedStringForLabel(label)
      print("\(localizedLabel)  \(number.stringValue)")
  }
}

Ответ 3

/* Get only first mobile number */

    let MobNumVar = (contact.phoneNumbers[0].value as! CNPhoneNumber).valueForKey("digits") as! String
    print(MobNumVar)

/* Get all mobile number */

    for ContctNumVar: CNLabeledValue in contact.phoneNumbers
    {
        let MobNumVar  = (ContctNumVar.value as! CNPhoneNumber).valueForKey("digits") as? String
        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? String
        let MobNumVar = FulMobNumVar.valueForKey("digits") as? String

        print(MccNamVar!)
        print(MobNumVar!)
    }

Ответ 4

Определение CNLabeledValue:

Класс CNLabeledValue является потокобезопасным классом, который определяет объект неизменяемого значения, который объединяет значение свойства контакта с меткой. Например, номер контактного телефона может содержать ярлык Home, Work, iPhone и т.д.

CNContact.phoneNumbers - это массив CNLabeledValues, и каждый CNLabeledValue имеет метку и значение.

Чтобы распечатать номер телефона, соответствующий CNContact, вы можете попробовать:

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

Ответ 5

В быстром 3 вы можете получить direclty

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

Ответ 6

Swift 3 "_$!<Mobile>!$_" Этот элемент написан для создания разницы, а также для того, чтобы поместить часть возможностей, чтобы полагаться на различные параметры.

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.stringValue)
            break
        }
        else
        {
            continue
        }
    }
}

Здесь num.value.stringValue