Ios 如何根据swift 3中联系人姓名的第一个字母排列数组以制作联系人的各个部分?
我正在使用此代码从设备获取联系人。如何根据swift 3中联系人姓名的第一个字母排列数组以制作联系人的各个部分Ios 如何根据swift 3中联系人姓名的第一个字母排列数组以制作联系人的各个部分?,ios,swift,Ios,Swift,我正在使用此代码从设备获取联系人。如何根据swift 3中联系人姓名的第一个字母排列数组以制作联系人的各个部分 lazy var contacts: [CNContact] = { let contactStore = CNContactStore() let keysToFetch = [ CNContactFormatter.descriptorForRequiredKeys(for: .fullName), C
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
}()
lazy var联系人:[CNContact]={
让contactStore=CNContactStore()
让keystefetch=[
CNContactFormatter.descriptorForRequiredKeys(用于:.fullName),
CNContactEmailAddressesKey,
CNContactPhoneNumbersKey,
CNContactImageDataAvailableKey,
CNContactThumbnailImageDataKey]作为[任何]
//把所有的容器都拿来
var allContainers:[CNContainer]=[]
做{
allContainers=尝试contactStore.containers(匹配:nil)
}抓住{
打印(“获取容器时出错”)
}
var结果:[CNContact]=[]
//迭代所有容器并将其联系人附加到结果数组中
适用于所有容器中的容器{
让fetchPredicate=CNContact.predicateForContactsInContainer(带标识符:container.identifier)
做{
let containerResults=尝试contactStore.unifiedContacts(匹配:fetchPredicate,KeyFetch:KeyFetchAs![CNKeyDescriptor])
results.append(contentsOf:containerResults)
}抓住{
打印(“获取容器结果时出错”)
}
}
results.sort{$0.givenName<$1.givenName}//按名称排序数组
返回结果
}()
我建议您创建一个CNContact数组 尝试创建[String:[CNContact]]的数组
现在通过循环运行[CNContact]并应用它们
let sortedContacts = [String:[CNContact]]()
for contact in contacts {
let contactPrefix = contactName(//get contact name and first character)
sortedContacts[contactPrefix].append(contact)
}
是的,这已经是CNContact数组了,但是如何安排它。我的意思是CNContact数组。[[CNContact]]。