我正在开发一个联系人应用程序,我想知道是否可以像 T9 经销商那样搜索联系人(与每个号码相关的字母也会过滤结果)。因此,如果我按 2 键,它应该搜索数字“2”以及“ABC”。
我正在尝试的代码:
let enteredChar = dialerTextField.text!
var pattern = keysDictionary?[enteredChar.last]
pattern = "[\(String(describing: pattern!.first)) - \(String(describing: pattern!.last))]"
// pattern = "[m-o]" Regex
do {
let matches = items.filter({
(item : String) -> Bool in
let stringMatch = item.range(of: pattern!, options: .regularExpression, range: nil, locale: nil)
return stringMatch != nil ? true : false
})
let predicate = CNContact.predicateForContacts(matchingName: pattern!)
let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey, CNContactPhoneNumbersKey, CNContactImageDataKey, CNContactImageDataAvailableKey]
var contacts = [CNContact]()
var message: String!
let contactsStore = CNContactStore()
do {
contacts = try contactsStore.unifiedContacts(matching: predicate, keysToFetch: keys as [CNKeyDescriptor])
if contacts.count == 0 {
message = "No contacts were found matching the given name."
}
}
catch {
message = "Unable to fetch contacts."
}
print("matches : ", contacts)
}
catch {
}
使用上面的代码,如果我改为说“Rob”,我可以搜索联系人姓名,pattern
但它不适用于 Regex "[p-s]"
。我想用正则表达式搜索。如何才能做到这一点?谢谢你。