У меня есть код для получения всех телефонных номеров в контактах пользователей, но я хотел бы отфильтровать только мобильные номера. В настоящее время я просто делаю это, добавляя в массив только числа с первой цифрой «+» или второй цифрой «7», как показано ниже:
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)")
}
}
}
}
Поскольку контакты хранятся на iPhone с пометкой «мобильный», мне было интересно, можно ли добавить в массив только эти номера. Спасибо :)