Контакты Swift 3

#swift #contacts

#swift #Контакты

Вопрос:

Я использую контакты Swift и пытаюсь определить, есть ли способ привести contacts.phoneNumbers как NSDictionary ? т.е. к значениям можно получить доступ contacts.phoneNumbers таким образом:

 self.officePhone.text = (contact.phoneNumbers[0].value ).value(forKey: "digits")as! String
  

Где количество определяется количеством телефонных номеров, введенных пользователем для каждого контакта, однако, если я печатаю contact.phoneNumbers , я получаю строку, подобную такой:

 label=_$!<Main>!$_, value=<CNPhoneNumber: 0x1452c870: countryCode=us, digits=7323214682>>
  

Где, как кажется, это пара ключ-значение, однако, если я попытаюсь привести к NSDictionary для легкого доступа, я получу ошибку:

Не удается преобразовать значение типа ‘CNLabeledValue в ожидаемые типы аргументов [AnyHashable: Any]

Есть мысли?

Комментарии:

1. phoneNumbers Свойство CNContact является массивом, а не словарем.

2. Хорошо, спасибо, понял. Но есть ли способ определить, как пользователь пометил их?

3. Выполните цикл по списку CNLabeledValue экземпляров. label Свойством является метка. value Свойство является CNPhoneNumber .

4. Ааааа!!, спасибо …. теперь я понял .

Ответ №1:

Это работает для меня:

     extension ViewController: CNContactPickerDelegate {
        func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
            let phoneNumbers = contact.phoneNumbers
            phoneNumbers.forEach {
                if let digits = $0.value.value(forKey: "digits") {
                    print(digits)
                }
            }
        }
    }
  

Комментарии:

1. Спасибо вам огромное… Очень признателен.