から連絡先を取得するにはディスプレイを構築するにはCNContactFormatter
を使用してください名前。要求のキーを指定するときは、descriptorForRequiredKeysForStyle
を使用して、適切なフィールドを要求していることを確認してください。スウィフトは
、それは次のようになります。
let store = CNContactStore()
store.requestAccess(for: .contacts) { granted, error in
guard granted else {
print(error?.localizedDescription ?? "Unknown error")
return
}
let request = CNContactFetchRequest(keysToFetch: [CNContactIdentifierKey as CNKeyDescriptor, CNContactFormatter.descriptorForRequiredKeys(for: .fullName)])
let formatter = CNContactFormatter()
formatter.style = .fullName
do {
try store.enumerateContacts(with: request) { contact, stop in
if let name = formatter.string(from: contact) {
print(name)
}
}
} catch let fetchError {
print(fetchError)
}
}
あなたはどちらの名前も会社がある状況が、ちょうど電話番号を持っていることが示唆されました。さて、その後、手動で自分で対処する必要があると思います:スウィフト2について
let request = CNContactFetchRequest(keysToFetch: [CNContactIdentifierKey as CNKeyDescriptor, CNContactPhoneNumbersKey as CNKeyDescriptor, CNContactFormatter.descriptorForRequiredKeys(for: .fullName)])
do {
try store.enumerateContacts(with: request) { contact, stop in
if let name = formatter.string(from: contact) {
print(name)
} else if let firstPhone = contact.phoneNumbers.first?.value {
print(firstPhone.stringValue)
} else {
print("no name; no number")
}
}
} catch let fetchError {
print(fetchError)
}
を、previous revision of this answerを参照してください。
出典
2016-04-26 09:22:38
Rob
これをチェックする方法.fullNameは利用可能かどうか。 isKeyAvilableでこれを使用できますか? – commando24
IIRCの場合、 '.FullName'は連絡先フレームワークの最初のバージョンで利用できましたので、空き状況を確認する必要はありません。オプションで 'stringFromContact'をバインドすることができます(たとえば、' 'let fullName = formatter.stringFromContact(contact){...}')。また、 'fullName!=" "'それが必要ではないとは思うが、そこにもチェックを加えることができる。 – Rob