プロトコルの一部であり、ユーザーが のアイテムをクリックするたびに呼び出されるfunc personViewController(personViewController: ABPersonViewController!,
shouldPerformDefaultActionForPerson person: ABRecord!,
property property: ABPropertyID,
identifier valueIdentifier: ABMultiValueIdentifier) -> Bool
関数を実装しようとしています。これにより、ユーザーが選択した情報がディクショナリにコピーされ、プロパティ名がキーになります。プロパティ値: 、たとえば。ABPersonViewControllerDelegate
ABPersonViewController
[String : String]
[..."kABPersonFirstNameProperty" : "Alexander"...]
また、プロパティがこれであるかどうかをテストするスイッチや条件の長いリストも避けたいと思います。できる限り一般的に処理したいと思います。ここでは、プロパティが単一値または複数値の場合の 2 つの異なるケースのみを扱います。複数値の場合は、利用可能なすべての情報をコピーしたいと思います。
たとえば、ユーザーがアドレスをクリックすると、結果は次のようになります[..."kABPersonAddressStreetKey" : "1 Infinite Loop", "kABPersonAddressCityKey" : "Cupertino" , "kABPersonAddressStateKey", "California (or CA?)"...]
。
Apple Developer Libraryと関連するSOの質問を何時間も精査した後、これが私が持っているすべてです(哀れです、私は知っています):
func personViewController(personViewController: ABPersonViewController!,
shouldPerformDefaultActionForPerson person: ABRecord!,
property property: ABPropertyID,
identifier valueIdentifier: ABMultiValueIdentifier) -> Bool {
s["kABPersonFirstNameProperty"] = ABRecordCopyValue(person, kABPersonFirstNameProperty) as! String //the name can't actually be selected by the user, but I want to capture it anyway
s["kABPersonLastNameProperty"] = ABRecordCopyValue(person, kABPersonLastNameProperty) as! String
if valueIdentifier == 0 { //property is a single property, not a multivalue property
let record = ABRecordCopyValue(person, property)
s[property as! String!] = record as! String
} else { //property is an ABMultiValue
let multiRecord = ABRecordCopyValue(person, property) as! ABMultiValueRef
s[property as! String] = ABMultiValueGetIndexForIdentifier(multiRecord, valueIdentifier)
}
return false
}
欠落している部分がたくさんあることがわかります。これを辞書に要約することさえ可能ですか?
事前に感謝します(そして、完全で正しい答えを提供した人には100の評判があります)。