2016-12-14 5 views
2

Я использую этот код для извлечения контактов с устройства. Как организовать массив для создания разделов контактов в соответствии с первой буквой имени контакта в swift 3?Как организовать массив для создания разделов контактов в соответствии с первым именем контактного лица в swift 3?

lazy var contacts: [CNContact] = { 
     let contactStore = CNContactStore() 
     let keysToFetch = [ 
      CNContactFormatter.descriptorForRequiredKeys(for: .fullName), 
      CNContactEmailAddressesKey, 
      CNContactPhoneNumbersKey, 
      CNContactImageDataAvailableKey, 
      CNContactThumbnailImageDataKey] as [Any] 

     // Get all the containers 
     var allContainers: [CNContainer] = [] 
     do { 
      allContainers = try contactStore.containers(matching: 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.predicateForContactsInContainer(withIdentifier: container.identifier) 

      do { 
       let containerResults = try contactStore.unifiedContacts(matching: fetchPredicate, keysToFetch: keysToFetch as! [CNKeyDescriptor]) 

       results.append(contentsOf: containerResults) 
      } catch { 
       print("Error fetching results for container") 
      } 
     } 
     results.sort{$0.givenName < $1.givenName} // sorting array by name 
     return results 
    }() 

ответ

0

Я предлагаю вам создать массив массивов CNContact.

+0

Да это уже массив CNContact, но как это устроить. –

+0

Я имел в виду массив массивов CNContact. [[CNContact]]. –

1

попробовать создать массив [String: [CNContact]] Теперь запустите [CNContact] через петлю и приложение их

let sortedContacts = [String:[CNContact]]() 
for contact in contacts { 
let contactPrefix = contactName(//get contact name and first character) 
sortedContacts[contactPrefix].append(contact) 
} 
Смежные вопросы