我正在尝试使用Swift在iOS中检索所有联系人的姓名和电话号码,并将它们放入数组中。我已经完成了这一步骤:
func findContacts() -> [CNContact] {
marrContactsNumber.removeAllObjects()
marrContactsName.removeAllObjects()
let store = CNContactStore()
let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
let fetchRequest = CNContactFetchRequest(keysToFetch: keysToFetch)
var contacts = [CNContact]()
do {
try store.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (let contact, let stop) -> Void in
contacts.append(contact)
self.marrContactsName.addObject(contact.givenName + " " + contact.familyName)
self.marrContactsNumber.addObject(contact.phoneNumbers)
print(contact.phoneNumbers)
}
catch let error as NSError {
print(error.localizedDescription)
}
print(marrContactsName.count)
print(marrContactsNumber.count)
return contacts
}
完成后,marrContactsName
包含了我所有联系人姓名的数组,正如预期的那样。例如:"John Doe"。然而,marrContactsNumber
返回一组类似于... 的值。
Once completed, marrContactsName
包含了我所有联系人姓名的数组,正如预期的那样。例如:"John Doe"。然而,marrContactsNumber
返回一组类似于... 的值。[<CNLabeledValue: 0x158a19950: identifier=F831DC7E-5896-420F-AE46-489F6C14DA6E,
label=_$!<Work>!$_, value=<CNPhoneNumber: 0x158a19640: countryCode=us, digits=6751420000>>,
<CNLabeledValue: 0x158a19a80: identifier=ECD66568-C6DD-441D-9448-BDEDDE9A68E1,
label=_$!<Work>!$_, value=<CNPhoneNumber: 0x158a199b0: countryCode=us, digits=5342766455>>]
我想知道如何仅作为字符串值检索电话号码,即“XXXXXXXXXX”。基本上,如何调用数字值。谢谢!
(contact.phoneNumbers.first?.value as? CNPhoneNumber)?.stringValue
。 - HamzaGhazouani((contact.phoneNumbers.first?.value)! as CNPhoneNumber).stringValue
的翻译是:将联系人电话号码的第一个值转换成CNPhoneNumber类型,然后获取其字符串表示形式。 - Rajamohan Svar phoneNumber = (number.value as! CNPhoneNumber).value(forKey: "digits") as! String if phoneNumber .contains("+1") { phoneNumber = "\(phoneNumber.dropFirst(2))" }
然后我得到了想要的结果。 - Jake