获取通讯录-AddressBook(swift)

获取通讯录-AddressBook(swift)

  1. 导入框架

    import AddressBook
    
  2. 实现步骤及代码

    override func viewDidLoad() {
            super.viewDidLoad()
    
            // 1. 获取当前的授权状态,
            let status = ABAddressBookGetAuthorizationStatus()
            if status ==  .NotDetermined {
    
                // 2. 如果当前没有授权, 应该请求授权
                // 参数1: 通讯录对象
                // 参数2: 回调block , 里面包含了请求的结果
                let book = ABAddressBookCreate().takeRetainedValue()
                ABAddressBookRequestAccessWithCompletion(book, { (granted: Bool, error: CFError!) in
                    if granted {
                        print("授权成功")
                    }else {
                        print("授权失败")
                    }
                })
            }
        }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
        // 0. 验证授权状态
         let status = ABAddressBookGetAuthorizationStatus()
        if status != .Authorized {
            print("没有权限")
            return
        }
    
        // 1. 获取所有的联系人信息
        let book  = ABAddressBookCreate().takeRetainedValue()
        let array = ABAddressBookCopyArrayOfAllPeople(book).takeRetainedValue()
    
        // 2. 遍历每一个联系人
        // CFArray, 遍历这样的数组, 应该, 先取出所有的个数, 然后使用响应的函数, 获取里面每一个元素
        let count = CFArrayGetCount(array)
        for i in 0..<count {
    
            // 里面每一个对象, 都是一个联系人记录 ABRecord\
            // UnsafePointer<Void> == void * : 指向任意对象的指针
            // swift 对于这种对象, 有个专门的函数
            // 注意事项: 必须明确的恩知道, 目标到底是什么类型
    
            let personP = CFArrayGetValueAtIndex(array, i)
            let person = unsafeBitCast(personP, ABRecord.self)
    
            // 获取姓名
            let firsName = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeRetainedValue() as! String
            let lastName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue() as! String
            print(firsName, lastName)
    
            // 获取电话号码(复杂属性, 多值)
            let multiValue = ABRecordCopyValue(person, kABPersonPhoneProperty).takeRetainedValue() as ABMultiValueRef
    
            // 遍历电话号码
            let num = ABMultiValueGetCount(multiValue)
            for j in 0..<num {
    
                // 电话号码 = 标签 + 值
                let label = ABMultiValueCopyLabelAtIndex(multiValue, j).takeRetainedValue()
                let value = ABMultiValueCopyValueAtIndex(multiValue, j).takeRetainedValue() as! String
    
                print(label, value)
            }
        }
    }
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在日常的程序开发中,我们不仅会使用用户的账号密码进行数据的管理,在实际情况下,对于用户通信录的获取也尤为重要,基于...
    BWLi420阅读 737评论 0 8
  • 如何访问用户的通讯录 在iOS中,有2个框架可以访问用户的通讯录 AddressBookUI.framework ...
    JonesCxy阅读 809评论 0 2
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,338评论 3 25
  • (1) 看窗外的梧桐叶窸窸窣窣的,被那明媚的阳光照影着,地面上有这斑驳的树影,同学们在...
    1b7925fd0092阅读 295评论 1 1
  • 女人最难承认的事情 音愈系|每晚22:00用我的声音,和远方的你说晚安​ BGM:《我爱的人》(林宥嘉) 晚安曲:...
    音愈系阅读 217评论 0 0