獲取通訊錄-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閱讀 721評論 0 8
  • 如何訪問用戶的通訊錄 在iOS中,有2個框架可以訪問用戶的通訊錄 AddressBookUI.framework ...
    JonesCxy閱讀 788評論 0 2
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應用程序 ...
    大L君閱讀 3,271評論 3 25
  • (1) 看窗外的梧桐葉窸窸窣窣的,被那明媚的陽光照影著,地面上有這斑駁的樹影,同學們在...
    1b7925fd0092閱讀 281評論 1 1
  • 女人最難承認的事情 音愈系|每晚22:00用我的聲音,和遠方的你說晚安? BGM:《我愛的人》(林宥嘉) 晚安曲:...
    音愈系閱讀 197評論 0 0