美文网首页
Swift 获取手机联系人

Swift 获取手机联系人

作者: 此生浮华祇盼伊亽 | 来源:发表于2016-08-24 11:44 被阅读500次
    import UIKit
    //导入框架
    import AddressBook
    import AddressBookUI
     
    class ViewController: UIViewController {
         
        //address Book对象,用来获取电话簿句柄
        var addressBook:ABAddressBookRef?
     
        override func viewDidLoad() {
            super.viewDidLoad()
             
            //定义一个错误标记对象,判断是否成功
            var error:Unmanaged<CFErrorRef>?
            addressBook = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()
             
            //发出授权信息
            let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()
            if (sysAddressBookStatus == ABAuthorizationStatus.NotDetermined) {
                println("requesting access...")
                var errorRef:Unmanaged<CFError>? = nil
                //addressBook = extractABAddressBookRef(ABAddressBookCreateWithOptions(nil, &errorRef))
                ABAddressBookRequestAccessWithCompletion(addressBook, { success, error in
                    if success {
                        //获取并遍历所有联系人记录
                        self.readRecords();
                    }
                    else {
                        println("error")
                    }
                })
            }
            else if (sysAddressBookStatus == ABAuthorizationStatus.Denied ||
                sysAddressBookStatus == ABAuthorizationStatus.Restricted) {
                println("access denied")
            }
            else if (sysAddressBookStatus == ABAuthorizationStatus.Authorized) {
                println("access granted")
                //获取并遍历所有联系人记录
                self.readRecords();
            }
        }
         
        //获取并遍历所有联系人记录
        func readRecords(){
            var sysContacts:NSArray = ABAddressBookCopyArrayOfAllPeople(addressBook)
                .takeRetainedValue() as NSArray
             
            for contact in sysContacts {
                //获取姓
                var lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?
                    .takeRetainedValue() as! String? ?? ""
                println("姓:\(lastName)")
                 
                //获取名
                var firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?
                    .takeRetainedValue() as! String? ?? ""
                println("名:\(firstName)")
                 
                //昵称
                var nikeName = ABRecordCopyValue(contact, kABPersonNicknameProperty)?
                    .takeRetainedValue() as! String? ?? ""
                println("昵称:\(nikeName)")
                 
                //公司(组织)
                var organization = ABRecordCopyValue(contact, kABPersonOrganizationProperty)?
                    .takeRetainedValue() as! String? ?? ""
                println("公司(组织):\(organization)")
                 
                //职位
                var jobTitle = ABRecordCopyValue(contact, kABPersonJobTitleProperty)?
                    .takeRetainedValue() as! String? ?? ""
                println("职位:\(jobTitle)")
                 
                //部门
                var department = ABRecordCopyValue(contact, kABPersonDepartmentProperty)?
                    .takeRetainedValue() as! String? ?? ""
                println("部门:\(department)")
                 
                //备注
                var note = ABRecordCopyValue(contact, kABPersonNoteProperty)?
                    .takeRetainedValue() as! String? ?? ""
                println("备注:\(note)")
                 
                //获取电话
                var phoneValues:ABMutableMultiValueRef? =
                ABRecordCopyValue(contact, kABPersonPhoneProperty).takeRetainedValue()
                if phoneValues != nil {
                    println("电话:")
                    for i in 0 ..< ABMultiValueGetCount(phoneValues){
                         
                        // 获得标签名
                        var phoneLabel = ABMultiValueCopyLabelAtIndex(phoneValues, i).takeRetainedValue()
                            as CFStringRef;
                        // 转为本地标签名(能看得懂的标签名,比如work、home)
                        var localizedPhoneLabel = ABAddressBookCopyLocalizedLabel(phoneLabel)
                            .takeRetainedValue() as! String
                         
                        var value = ABMultiValueCopyValueAtIndex(phoneValues, i)
                        var phone = value.takeRetainedValue() as! String
                        println("  \(localizedPhoneLabel):\(phone)")
                    }
                }
                 
                //获取Email
                var emailValues:ABMutableMultiValueRef? =
                ABRecordCopyValue(contact, kABPersonEmailProperty).takeRetainedValue()
                if emailValues != nil {
                    println("Email:")
                    for i in 0 ..< ABMultiValueGetCount(emailValues){
                         
                        // 获得标签名
                        var label = ABMultiValueCopyLabelAtIndex(emailValues, i).takeRetainedValue()
                            as CFStringRef;
                        var localizedLabel = ABAddressBookCopyLocalizedLabel(label)
                            .takeRetainedValue() as! String
                         
                        var value = ABMultiValueCopyValueAtIndex(emailValues, i)
                        var email = value.takeRetainedValue() as! String
                        println("  \(localizedLabel):\(email)")
                    }
                }
                 
                //获取地址
                var addressValues:ABMutableMultiValueRef? =
                ABRecordCopyValue(contact, kABPersonAddressProperty).takeRetainedValue()
                if addressValues != nil {
                    println("地址:")
                    for i in 0 ..< ABMultiValueGetCount(addressValues){
                         
                        // 获得标签名
                        var label = ABMultiValueCopyLabelAtIndex(addressValues, i).takeRetainedValue()
                            as CFStringRef;
                        var localizedLabel = ABAddressBookCopyLocalizedLabel(label)
                            .takeRetainedValue() as! String
                         
                        var value = ABMultiValueCopyValueAtIndex(addressValues, i)
                        var addrNSDict:NSMutableDictionary = value.takeRetainedValue()
                            as! NSMutableDictionary
                        var country:String = addrNSDict.valueForKey(kABPersonAddressCountryKey as String)
                            as? String ?? ""
                        var state:String = addrNSDict.valueForKey(kABPersonAddressStateKey asString)
                            as? String ?? ""
                        var city:String = addrNSDict.valueForKey(kABPersonAddressCityKey asString)
                            as? String ?? ""
                        var street:String = addrNSDict.valueForKey(kABPersonAddressStreetKey asString)
                            as? String ?? ""
                        var contryCode:String = addrNSDict
                            .valueForKey(kABPersonAddressCountryCodeKey as String) as? String?? ""
                        print("  \(localizedLabel): Contry:\(country) State:\(state) ")
                        println("City:\(city) Street:\(street) ContryCode:\(contryCode) ")
                    }
                }
                 
                //获取纪念日
                var dateValues:ABMutableMultiValueRef? =
                ABRecordCopyValue(contact, kABPersonDateProperty).takeRetainedValue()
                if dateValues != nil {
                    println("纪念日:")
                    for i in 0 ..< ABMultiValueGetCount(dateValues){
                         
                        // 获得标签名
                        var label = ABMultiValueCopyLabelAtIndex(emailValues, i).takeRetainedValue()
                            as CFStringRef;
                        var localizedLabel = ABAddressBookCopyLocalizedLabel(label)
                            .takeRetainedValue() as! String
                         
                        var value = ABMultiValueCopyValueAtIndex(dateValues, i)
                        var date = (value.takeRetainedValue() as? NSDate)?.description ?? ""
                        println("  \(localizedLabel):\(date)")
                    }
                }
                 
                //获取即时通讯(IM)
                var imValues:ABMutableMultiValueRef? =
                ABRecordCopyValue(contact, kABPersonInstantMessageProperty).takeRetainedValue()
                if imValues != nil {
                    println("即时通讯(IM):")
                    for i in 0 ..< ABMultiValueGetCount(imValues){
                         
                        // 获得标签名
                        var label = ABMultiValueCopyLabelAtIndex(imValues, i).takeRetainedValue()
                            as CFStringRef;
                        var localizedLabel = ABAddressBookCopyLocalizedLabel(label)
                            .takeRetainedValue() as! String
                         
                        var value = ABMultiValueCopyValueAtIndex(imValues, i)
                        var imNSDict:NSMutableDictionary = value.takeRetainedValue()
                            as! NSMutableDictionary
                        var serves:String = imNSDict
                            .valueForKey(kABPersonInstantMessageServiceKey as String) as? String ?? ""
                        var userName:String = imNSDict
                            .valueForKey(kABPersonInstantMessageUsernameKey as String) as? String ?? ""
                        println("  \(localizedLabel): Serves:\(serves) UserName:\(userName)")
                    }
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:Swift 获取手机联系人

          本文链接:https://www.haomeiwen.com/subject/uvznsttx.html