The document discusses the AddressBook framework in Swift, including ABAddressBookRef which represents an address book, ABRecordRef which represents a person, group or source, and ABMulitValueRef which represents a multi-valued property like multiple phone numbers. It provides code examples for creating and accessing these objects to retrieve and work with contact data from the address book.
6. ABAddressBookRef+Crea.on
var error: Unmanaged<CFErrorRef>? = nil
var addressBook: ABAddressBookRef? =
ABAddressBookCreateWithOptions(nil, &error)?.takeRetainedValue()
if let addressBook = addressBook {
// Success!
} else {
// Error
let e = error!.takeUnretainedValue() as AnyObject as NSError
println("An error occurred: (e)")
}
7. ABAddressBookRef+Authoriza2on
let addressBook: ABAddressBookRef = /* ... */
ABAddressBookRequestAccessWithCompletion(addressBook) {
(success, error) in
if success {
// We can use the address book.
} else {
// User denied the request.
let e = error as AnyObject as NSError
println("An error occurred: (e)")
}
}
12. ABRecordRef*Acquisi/on
let peoplePickerDelegate = /* some object */
let peoplePicker = ABPeoplePickerNavigationController()
peoplePicker.delegate = peoplePickerDelegate
viewController.presentViewController(
peoplePicker,
animated: true,
completion: nil
)
13. ABRecordRef*Acquisi/on
// In your ABPeoplePickerNavigationControllerDelegate
func peoplePickerNavigationController(
peoplePicker: ABPeoplePickerNavigationController!,
didSelectPerson person: ABRecord!) {
// Do something with person
}
func peoplePickerNavigationControllerDidCancel(
peoplePicker: ABPeoplePickerNavigationController!) {
let p = peoplePicker.presentingViewController!
p.dismissViewControllerAnimated(true, completion: nil)
}
14. ABRecordRef*Acquisi/on
let addressBook: ABAddressBookRef = /* ... */
// You can get a record's ID with ABRecordGetID()
let recordID: ABRecordID = /* ... */
let unmanagedPerson: Unmanaged<ABRecordRef>? =
ABAddressBookGetPersonWithRecordID(addressBook, recordID)
// ABAddressBookGetGroupWithRecordID
// ABAddressBookGetSourceWithRecordID
if let person = unmanagedPerson?.takeUnretainedValue() {
// You have a person!
}
15. ABRecordRef*Values
func ABRecordCopyValue(
record: ABRecord!,
property: ABPropertyID
) -> Unmanaged<AnyObject>!
let kABPersonFirstNameProperty: ABPropertyID
let kABPersonMiddleNameProperty: ABPropertyID
let kABPersonLastNameProperty: ABPropertyID
// etc.
16. ABRecordRef*Values
let firstName: CFStringRef = ABRecordCopyValue(
record,
kABPersonFirstNameProperty
)?.takeRetainedValue()
if firstName != nil {
let fn = firstName! as AnyObject as String
println("The first name is (fn).")
}
17. ABRecordRef*Values
let phones: ABMultiValueRef? = ABRecordCopyValue(
record,
kABPersonPhoneProperty
)?.takeRetainedValue()
if let phones = phones {
// We have an ABMultiValueRef.
}
21. ABMul&ValueRef
let count: Int = ABMultiValueGetCount(phones)
for i in 0..<count {
let label: String = ABMultiValueCopyLabelAtIndex(
phones, i
)!.takeRetainedValue() as AnyObject as String
let value: String = ABMultiValueCopyValueAtIndex(
phones, i
)!.takeRetainedValue() as AnyObject as String
println("(label) -> (value)")
}