获取通讯录-Contacts(swift)

获取通讯录-Contacts(swift)

  1. 导入框架

    import Contacts
    
  2. 实现步骤及代码

    override func viewDidLoad() {
        super.viewDidLoad()
    
        // 1. 判断授权
        let status = CNContactStore.authorizationStatusForEntityType(CNEntityType.Contacts)
    
        // 2. 如果授权没有请求,需要请求
        if status == .NotDetermined {
    
            let contactStore = CNContactStore()
    
            contactStore.requestAccessForEntityType(CNEntityType.Contacts, completionHandler: { (granted: Bool, error: NSError?) in
                if granted {
                    print("授权成功")
                }
            })
        }
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
        // 验证授权
        // 1. 判断授权
        let status = CNContactStore.authorizationStatusForEntityType(CNEntityType.Contacts)
        // 2. 如果授权没有请求,需要请求
        if status != .Authorized {
            print("授权失败")
            return
        }
    
        // 获取所有联系人
        // 1.创建联系人仓库对象
          let contactStore = CNContactStore()
    
        // 2, 使用一个方法, 遍历所有联系人
        // 作用, 根据筛选的条件, 遍历所有的联系人
        // 值获取这个参数里面提供的key对应的值, 其他的字段属性, 都不获取
        let request = CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey, CNContactPhoneNumbersKey])
    
        do {
            // 遍历联系人
            // 注意, 这种遍历, 类似于数组的遍历
            // 每执行一次block, 只会传递过来一个联系人对象
            // 而联系人对象里面的值得获取, 是根据上面 CNContactFetchRequest, 参数指定的key来的, 没写的key, 统统不获取
            try contactStore.enumerateContactsWithFetchRequest(request) { (contact: CNContact, stop) in
                //
                let givenName = contact.givenName
                print(givenName)
                // 遍历电话号码
                let phoneNums = contact.phoneNumbers
                // 每个电话号码, 包括标签和值
                for phoneNum in phoneNums {
                    let label = phoneNum.label
                    let value = phoneNum.value as! CNPhoneNumber
                    print(label, value.stringValue)
                }
            }
        } catch {
    
            print(error)
            return
        }
    }
    

推荐阅读更多精彩内容