我正在开发一个联系人应用程序,我想知道是否可以搜索像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 {
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我可以搜索联系人姓名,如果我pattern改为说"抢",但它不适用于正则表达式"[p-s]".我想用正则表达式搜索.如何才能做到这一点?谢谢.
没有与您所需的库完全匹配的库.
所以
转到您的项目并Custom Keyboard Extension为您的应用程序创建一个新项目.
这与你的T9键盘教程有点匹配来自youtube
这个youtube totorial 在这里可以帮助你进一步
创建一个将每个字母映射到数字的字典
喜欢 {"a":1,"b":1,"c":1,"d":2,.. "z":9}
并获取所有联系人并找出与联系人姓名对应的数字模式(使用上面的字典).
喜欢 {"anna":"2662","baby":"2229","denis":"33647","emila":"36452"}
每当用户开始在键盘上键入时,获取上述词典中匹配的所有模式就像用户类型"2"相应的匹配一样"anna" and "baby".
从用户那里获得更多输入时消除匹配.
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |