如何使用Swift联系人对联系人进行排序

Xer*_*nox 9 contacts ios swift cncontact

我已经阅读了有关排序联系人的官方苹果文档,但我不确定如何实现它.所以,这是获取请求:

let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)
Run Code Online (Sandbox Code Playgroud)

和我最喜欢的排序顺序:

let sortOrder = CNContactSortOrder.UserDefault
Run Code Online (Sandbox Code Playgroud)

这就是我通常获取联系人的方式:

    do {
        try store.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (let contact, let stop) -> Void in
                self.contacts.append(contact)
        })
    }
    catch let error as NSError {
        print(error.localizedDescription)
    }
Run Code Online (Sandbox Code Playgroud)

现在该怎么办sortOrder?我应该在整个提取过程中包含哪些内容?

jey*_*jey 28

更新了Swift 4.0

let fetchRequest = CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey as CNKeyDescriptor, CNContactFamilyNameKey as CNKeyDescriptor, CNContactMiddleNameKey as CNKeyDescriptor, CNContactEmailAddressesKey as CNKeyDescriptor,CNContactPhoneNumbersKey as CNKeyDescriptor])

        fetchRequest.sortOrder = CNContactSortOrder.userDefault

        let store = CNContactStore()

        do {
            try store.enumerateContacts(with: fetchRequest, usingBlock: { (contact, stop) -> Void in
              //  print(contact.phoneNumbers.first?.value ?? "not found")

            })
        }
        catch let error as NSError {
            print(error.localizedDescription)
        }
Run Code Online (Sandbox Code Playgroud)

旧版本 写得像这样

 fetchRequest.sortOrder = CNContactSortOrder.UserDefault
Run Code Online (Sandbox Code Playgroud)

在fetchRequest对象创建之后,你的最终输出就像

let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)

fetchRequest.sortOrder = CNContactSortOrder.UserDefault

 do {
        try store.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (let contact, let stop) -> Void in
                self.contacts.append(contact)
        })
    }
    catch let error as NSError {
        print(error.localizedDescription)
    }
Run Code Online (Sandbox Code Playgroud)