我试图搜索用户的联系人,但我的一条if语句被破坏了。它检查输入的某个索引处的字符是否与givenName,familyName和phoneNumber的相同索引的字符匹配。我的问题是,有时输入的字符数大于givenName,familyName或phoneNumber中的字符数。这使得我的if语句比较输入的某个索引处的字符和不存在的索引处的字符。例如,它将charInput [2]与charGivenName [2]进行比较,但charGivenName仅在charGivenName [0]和charGivenName [1]中具有值。由于charGivenName [2]不存在,我的应用程序崩溃了。
有谁知道如何解决这个问题?
@IBAction func contactTextFieldChanged(_ sender: Any) {
if contactTextField.text != "" {
contactTableView.isHidden = false
let request = CNContactFetchRequest(keysToFetch: keys as! [CNKeyDescriptor])
do {
try contactStore.enumerateContacts(with: request){
(contact, stop) in
self.contacts.append(contact)
for phoneNumber in contact.phoneNumbers {
if phoneNumber.value.stringValue != ""{
let charGivenName = Array(contact.givenName)
let charFamilyName = Array(contact.familyName)
let charNumber = Array(phoneNumber.value.stringValue)
let charInput = Array(self.contactTextField.text!)
var matchBool = false
for inputCount in (0...charInput.count - 1) {
if charNumber[inputCount] == charInput[inputCount] || charGivenName[inputCount] == charInput[inputCount] || charFamilyName[inputCount] == charInput[inputCount]{
matchBool = true
} else {
matchBool = false
break
}
if matchBool == true {
print("\(contact.givenName) \(contact.familyName) \(phoneNumber.value.stringValue)")
}
}
}
}
}
} catch {
print("Error fetching contacts")
}
}
if contactTextField.text == ""{
contactTableView.isHidden = true
}
}