获取通讯录-Contacts(swift)
-
导入框架
import Contacts
-
实现步骤及代码
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 } }