导入框架Contacts
import Contacts
权限判断
/// 加载通讯录
func requestContact(currentVC:UIViewController){
let status = CNContactStore.authorizationStatus(for: .contacts)
var success:(()->Void) = {
[weak self] in
let store = CNContactStore()
if let contacts = self?.getAllContactData(store: store) {
self?.dataArray = contacts
self?.tableView.reloadData()
}
}
var fail:(()->Void) = {
[weak self] in
let alert = UIAlertController(title: "Request Access Permissions", message: "Gets the address book access?", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "Default action"), style: .default, handler: { [weak self]_ in
if #available(iOS 10.0, *) {
UIApplication.shared.open(URL.init(string: UIApplication.openSettingsURLString)!, options: [:]) { (flag) in
}
} else {
UIApplication.shared.openURL(URL.init(string: UIApplication.openSettingsURLString)!)
}
}))
alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: "Default action"), style: .cancel, handler: { _ in
NSLog("The \"OK\" alert occured.")
}))
currentVC.present(alert, animated: true, completion: nil)
}
switch status {
case .authorized:
do{
success()
}
case .notDetermined:
do{
let store = CNContactStore()
store.requestAccess(for: .contacts, completionHandler: { (isOk, error) in
if isOk {
DispatchQueue.main.async {
success()
}
}else{
DispatchQueue.main.async {
fail()
}
}
})
}
case .restricted, .denied:
fail()
break
@unknown default:
fail()
break
}
}
func getAllContactData(store:CNContactStore) -> [[String:Any]]{
let keys = [CNContactPhoneNumbersKey,CNContactGivenNameKey,CNContactFamilyNameKey,CNContactMiddleNameKey]
let request = CNContactFetchRequest.init(keysToFetch: keys as[CNKeyDescriptor])
var tempArr = [[String:Any]]()
do{
try store.enumerateContacts(with: request, usingBlock: { (contact, stop) in
let giveName:String = contact.givenName
let middleName:String = contact.middleName
let famliyName:String = contact.familyName
let nameString = (middleName + " " + giveName + " " + famliyName)
let phoneNumbers = contact.phoneNumbers
if let phone = phoneNumbers.first {
tempArr.append(["name":nameString,"cellphone":phone])
}
})
}
catch{
}
return tempArr
}
添加
//新增一个联系人
func addContact() {
//创建通讯录对象
let store = CNContactStore ()
//创建CNMutableContact类型的实例
let contactToAdd = CNMutableContact ()
//设置姓名
contactToAdd.familyName = "张"
contactToAdd.givenName = "飞"
//设置昵称
contactToAdd.nickname = "fly"
//设置头像
let image = UIImage (named: "fei" )!
contactToAdd.imageData = UIImagePNGRepresentation (image)
//设置电话
let mobileNumber = CNPhoneNumber (stringValue: "18510002000" )
let mobileValue = CNLabeledValue (label: CNLabelPhoneNumberMobile ,
value: mobileNumber)
contactToAdd.phoneNumbers = [mobileValue]
//设置email
let email = CNLabeledValue (label: CNLabelHome , value: "feifei@163.com" as NSString )
contactToAdd.emailAddresses = [email]
//添加联系人请求
let saveRequest = CNSaveRequest ()
saveRequest.add(contactToAdd, toContainerWithIdentifier: nil )
do {
//写入联系人
try store.execute(saveRequest)
print ( "保存成功!" )
} catch {
print (error)
}
}
修改
func editContact() {
//创建通讯录对象
let store = CNContactStore ()
//获取Fetch,并且指定要获取联系人中的什么属性
let keys = [ CNContactFamilyNameKey , CNContactGivenNameKey , CNContactNicknameKey ]
//创建请求对象,需要传入一个(keysToFetch: [CNKeyDescriptor]) 包含'CNKeyDescriptor'类型的数组
let request = CNContactFetchRequest (keysToFetch: keys as [ CNKeyDescriptor ])
//遍历所有联系人
do {
try store.enumerateContacts(with: request, usingBlock: {
(contact : CNContact , stop : UnsafeMutablePointer < ObjCBool >) -> Void in
let mutableContact = contact.mutableCopy() as ! CNMutableContact
//获取姓名
let lastName = mutableContact.familyName
let firstName = mutableContact.givenName
//判断是否符合要求
if lastName == "张" && firstName == "飞" {
//设置昵称
mutableContact.nickname = "小飞飞"
//修改联系人请求
let request = CNSaveRequest ()
request.update(mutableContact)
do {
//修改联系人
try store.execute(request)
print ( "修改成功!" )
} catch {
print (error)
}
}
})
} catch {
print (error)
}
}
删除
func deleteContact() {
//创建通讯录对象
let store = CNContactStore ()
//获取Fetch,并且指定要获取联系人中的什么属性
let keys = [ CNContactFamilyNameKey , CNContactGivenNameKey , CNContactNicknameKey ]
//创建请求对象,需要传入一个(keysToFetch: [CNKeyDescriptor]) 包含'CNKeyDescriptor'类型的数组
let request = CNContactFetchRequest (keysToFetch: keys as [ CNKeyDescriptor ])
//遍历所有联系人
do {
try store.enumerateContacts(with: request, usingBlock: {
(contact : CNContact , stop : UnsafeMutablePointer < ObjCBool >) -> Void in
let mutableContact = contact.mutableCopy() as ! CNMutableContact
//获取姓名
let lastName = mutableContact.familyName
let firstName = mutableContact.givenName
//判断是否符合要求
if lastName == "张" && firstName == "飞" {
//删除联系人请求
let request = CNSaveRequest ()
request.delete(mutableContact)
do {
//执行操作
try store.execute(request)
print ( "删除成功!" )
} catch {
print (error)
}
}
})
} catch {
print (error)
}
}
网友评论