Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何根据swift 3中联系人姓名的第一个字母排列数组以制作联系人的各个部分?_Ios_Swift - Fatal编程技术网

Ios 如何根据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

我正在使用此代码从设备获取联系人。如何根据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
    }()
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]]。