2016-03-11 4 views
0

У меня возникли проблемы с распаковкой CNLabeledValue, чтобы получить номер телефона. Вот мой код (Swift), и то, что я сейчас получаю, это <CNPhoneNumber: 0x12cefa000: countryCode=us, digits=4157119521>. Мне просто нужно получить доступ к значению digits, поэтому я пытаюсь распечатать его в пределах for number in result.phoneNumbers {}.Доступ к номерам телефонов из раздела «Контакты» в iOS 9

lazy var contacts: [CNContact] = { 
     let contactStore = CNContactStore() 
     let keysToFetch = [ 
      CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName), 
      CNContactPhoneNumbersKey] 

     // Get all the containers 
     var allContainers: [CNContainer] = [] 
     do { 
      allContainers = try contactStore.containersMatchingPredicate(nil) 
     } catch { 
      print("Error fetching containers") 
     } 

     var results: [CNContact] = [] 

     // Iterate all containers and append their contacts to our results array 
     for container in allContainers { 
      let fetchPredicate = CNContact.predicateForContactsInContainerWithIdentifier(container.identifier) 

      do { 
       let containerResults = try contactStore.unifiedContactsMatchingPredicate(fetchPredicate, keysToFetch: keysToFetch) 
       for result in containerResults { 

        for number in result.phoneNumbers { 

         // WHAT SHOULD I PRINT HERE????? 
         print(number.value) 
        } 

       } 
       results.appendContentsOf(containerResults) 
      } catch { 
       print("Error fetching results for container") 
      } 
     } 

     return results 
    }() 

ответ

0

Свойство stringValue из CNPhoneNumber отформатирован цифр. Вам просто нужно еще немного украсить строку, если вы не хотите иметь такие символы, как «,», «(» или «)».

for number in result.phoneNumbers { 
    guard let numberValue = number.value as? CNPhoneNumber else { 
     continue 
    } 
    print(numberValue) 
    print(String(numberValue.stringValue.characters.filter({ !["-", "(", ")"].contains($0) }))) 
} 
0
if contact.isKeyAvailable(CNContactPhoneNumbersKey) { 
       for phoneNumber in contact.phoneNumbers { 
        let label = CNLabeledValue.localizedStringForLabel(phoneNumber.label) 

        let phone = phoneNumber.value as! CNPhoneNumber 
         print(" \(label) \(phone.stringValue)") 
       } 
      } 

это должно напечатать (т.е. контакт по умолчанию Анна Аро.): Дом 555-522-8243

, то вы можете отформатировать "stringValue" так, как вы хотите

Смежные вопросы