一、在工程中添加AddressBook.framework和AddressBookUI.framework

二、首先在代码中添加如下

import AddressBook
import AddressBookUI

三、在添加以下封装好的方法

    func getSysContacts() -> [[String:AnyObject]] {var error:Unmanaged<CFError>?var addressBook: ABAddressBookRef? = ABAddressBookCreateWithOptions(nil, &error).takeRetainedValue()let sysAddressBookStatus = ABAddressBookGetAuthorizationStatus()if sysAddressBookStatus == .Denied || sysAddressBookStatus == .NotDetermined {// Need to ask for authorizationvar authorizedSingal:dispatch_semaphore_t = dispatch_semaphore_create(0)var askAuthorization:ABAddressBookRequestAccessCompletionHandler = { success, error inif success {ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArraydispatch_semaphore_signal(authorizedSingal)}}ABAddressBookRequestAccessWithCompletion(addressBook, askAuthorization)dispatch_semaphore_wait(authorizedSingal, DISPATCH_TIME_FOREVER)}func analyzeSysContacts(sysContacts:NSArray) -> [[String:AnyObject]] {var allContacts:Array = [[String:AnyObject]]()func analyzeContactProperty(contact:ABRecordRef, property:ABPropertyID) -> [AnyObject]? {var propertyValues:ABMultiValueRef? = ABRecordCopyValue(contact, property)?.takeRetainedValue()if propertyValues != nil {var values:Array<AnyObject> = Array()for i in 0 ..< ABMultiValueGetCount(propertyValues) {var value = ABMultiValueCopyValueAtIndex(propertyValues, i)switch property {// 地址case kABPersonAddressProperty :var valueDictionary:Dictionary = [String:String]()var addrNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionaryvalueDictionary["_Country"] = addrNSDict.valueForKey(kABPersonAddressCountryKey) as? String ?? ""valueDictionary["_State"] = addrNSDict.valueForKey(kABPersonAddressStateKey) as? String ?? ""valueDictionary["_City"] = addrNSDict.valueForKey(kABPersonAddressCityKey) as? String ?? ""valueDictionary["_Street"] = addrNSDict.valueForKey(kABPersonAddressStreetKey) as? String ?? ""valueDictionary["_Contrycode"] = addrNSDict.valueForKey(kABPersonAddressCountryCodeKey) as? String ?? ""// 地址整理var fullAddress:String = (valueDictionary["_Country"]! == "" ? valueDictionary["_Contrycode"]! : valueDictionary["_Country"]!) + ", " + valueDictionary["_State"]! + ", " + valueDictionary["_City"]! + ", " + valueDictionary["_Street"]!values.append(fullAddress)// SNScase kABPersonSocialProfileProperty :var valueDictionary:Dictionary = [String:String]()var snsNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionaryvalueDictionary["_Username"] = snsNSDict.valueForKey(kABPersonSocialProfileUsernameKey) as? String ?? ""valueDictionary["_URL"] = snsNSDict.valueForKey(kABPersonSocialProfileURLKey) as? String ?? ""valueDictionary["_Serves"] = snsNSDict.valueForKey(kABPersonSocialProfileServiceKey) as? String ?? ""values.append(valueDictionary)// IMcase kABPersonInstantMessageProperty :var valueDictionary:Dictionary = [String:String]()var imNSDict:NSMutableDictionary = value.takeRetainedValue() as NSMutableDictionaryvalueDictionary["_Serves"] = imNSDict.valueForKey(kABPersonInstantMessageServiceKey) as? String ?? ""valueDictionary["_Username"] = imNSDict.valueForKey(kABPersonInstantMessageUsernameKey) as? String ?? ""values.append(valueDictionary)// Datecase kABPersonDateProperty :var date:String? = (value.takeRetainedValue() as? NSDate)?.descriptionif date != nil {values.append(date!)}default :var val:String = value.takeRetainedValue() as? String ?? ""values.append(val)}}return values}else{return nil}}for contact in sysContacts {var currentContact:Dictionary = [String:AnyObject]()/*部分单值属性*/// 姓、姓氏拼音var FirstName:String = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as String? ?? ""currentContact["FirstName"] = FirstNamecurrentContact["FirstNamePhonetic"] = ABRecordCopyValue(contact, kABPersonFirstNamePhoneticProperty)?.takeRetainedValue() as String? ?? ""// 名、名字拼音var LastName:String = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as String? ?? ""currentContact["LastName"] = LastNamecurrentContact["LirstNamePhonetic"] = ABRecordCopyValue(contact, kABPersonLastNamePhoneticProperty)?.takeRetainedValue() as String? ?? ""// 昵称currentContact["Nikename"] = ABRecordCopyValue(contact, kABPersonNicknameProperty)?.takeRetainedValue() as String? ?? ""// 姓名整理currentContact["fullName"] = LastName + FirstName// 公司(组织)currentContact["Organization"] = ABRecordCopyValue(contact, kABPersonOrganizationProperty)?.takeRetainedValue() as String? ?? ""// 职位currentContact["JobTitle"] = ABRecordCopyValue(contact, kABPersonJobTitleProperty)?.takeRetainedValue() as String? ?? ""// 部门currentContact["Department"] = ABRecordCopyValue(contact, kABPersonDepartmentProperty)?.takeRetainedValue() as String? ?? ""// 备注currentContact["Note"] = ABRecordCopyValue(contact, kABPersonNoteProperty)?.takeRetainedValue() as String? ?? ""// 生日(类型转换有问题,不可用)//currentContact["Brithday"] = ((ABRecordCopyValue(contact, kABPersonBirthdayProperty)?.takeRetainedValue()) as NSDate).description/*部分多值属性*/// 电话var Phone:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonPhoneProperty)if Phone != nil {currentContact["Phone"] = Phone}// 地址var Address:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonAddressProperty)if Address != nil {currentContact["Address"] = Address}// E-mailvar Email:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonEmailProperty)if Email != nil {currentContact["Email"] = Email}// 纪念日var Date:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonDateProperty)if Date != nil {currentContact["Date"] = Date}// URLvar URL:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonURLProperty)if URL != nil{currentContact["URL"] = URL}// SNSvar SNS:Array<AnyObject>? = analyzeContactProperty(contact, kABPersonSocialProfileProperty)if SNS != nil {currentContact["SNS"] = SNS}allContacts.append(currentContact)}return allContacts}return analyzeSysContacts( ABAddressBookCopyArrayOfAllPeople(addressBook).takeRetainedValue() as NSArray )}

四、在 viewDidLoad 方法中调用

var array:Array<Dictionary<String,AnyObject>> = getSysContacts()
for contact in array {println(contact)
}

转载于:https://www.cnblogs.com/maple023/p/4272676.html

swift获取通讯录相关推荐

  1. IOS Swift 5.0 获取通讯录列表拨打电话

    一.创建项目 这个很简单,就不多说了 二.实现 UITableView 以及相关布局 也不复杂,不会的可以参考一下我的另一篇,都是最基础的 三.添加权限 获取通讯录数据需要添加请求访问通讯录的权限,第 ...

  2. Swift - 访问通讯录联系人(使用系统提供的通讯录交互界面)

    1,通讯录访问介绍 通讯录(或叫地址簿,电话簿)是一个数据库,里面储存了联系人的相关信息.要实现访问通讯录有如下两种方式: (1)AddressBook.framework框架 : 没有界面,通过代码 ...

  3. ios 简书 获取通讯录信息_iOS 13获取用户通讯录需要注意的

    获取通讯录还有一个最大的变化,就是iOS9以后 访问通讯录属性,要事先设置好,否则会奔溃, 下面是列表 // 姓名前缀 CNContactNamePrefixKey // 名 CNContactGiv ...

  4. iOS走近商城APP(四 runloop应用 获取通讯录并处理)

    ###开篇 转眼又要过年了,我的程序员生涯默默的又过了一年,年终篇就先闲扯几句.从接触简书到写第一篇到现在差不多也将近一年了,简书的布局风格确实是赏心悦目,习惯了这种写法之后,再看以前的博客感觉好乱, ...

  5. iOS6.0下获取通讯录用户列表

    2019独角兽企业重金招聘Python工程师标准>>> 自iOS6.0后获取通讯录列表需要询问用户,经过用户同意后才可以获取通讯录用户列表.而且ABAddressBookRef的初始 ...

  6. Swift 获取渐变色颜色值

    Swift 获取渐变色颜色值 最近需要完成一个字体颜色从白色随着滑动渐变到黑色的效果.所以需要获取颜色渐变值. 获取颜色 RGB 值 /// 获取 rgbfunc colorRGB(_ color: ...

  7. 如何使用Swift获取App版本和内部版本号?

    本文翻译自:How do I get the App version and build number using Swift? I have an IOS app with an Azure bac ...

  8. android通话记录列表apk,android打电话,发短信,获取通讯录、通话记录、短信记录...

    [实例简介] 代码实现android打电话,发短信,获取通讯录.通话记录.短信记录 [实例截图] [核心代码] 19287b5f-b70c-4210-ab04-9d24ddd60788 └── cal ...

  9. python模拟登陆163邮箱并获取通讯录

    From: http://hi.baidu.com/fc_lamp/blog/item/2466d1096fcc532de8248839.html python模拟登陆163邮箱并获取通讯录 #-*- ...

最新文章

  1. 微软服务器藏,配置微软CA服务器+SCEP
  2. jQuery初识 - jQuery案例练习
  3. 基于 HTML5 Canvas 实现的文字动画特效
  4. Vrep中将物体变得透明的方法
  5. java 抽象类的匿名类_Java匿名内部类(通过继承抽象类来实现)
  6. 05-BIO,NIO,AIO几种通讯模式的比较
  7. 2021高通AI应用创新大赛-创新赛道-垃圾分类识别 第三次会议研讨
  8. PHP网站开发有哪些框架,罗列几款时下高人气的PHP开发框架
  9. kubernetes-dashboard部署
  10. 深度学习:卷积神经网络之移动网络(MobileNet)
  11. vfp保存为html,vfp向HTTP发送文件
  12. head first设计模式之设计原则
  13. php 批量上传多个文件,小白浅析PHP中的单文件、多文件、批量上传
  14. 如何快速裁剪pdf中的页面
  15. Linux力挺微博世
  16. python游戏编程培训
  17. locust实现压测
  18. linux - nohup 命令 后一按回车就exit
  19. LOJ#3086. 「GXOI / GZOI2019」逼死强迫症(矩阵快速幂)
  20. C#模拟百度登录并到指定网站评论回帖(三)

热门文章

  1. (转)C#2.0泛型--Dictionary,List用法
  2. VC#2005 Starter Kit: Screen Saver 使用介绍
  3. AutoMake文档
  4. 批量删除某个目录下的 某类型文件方法
  5. ansible的安装和ansible的模板
  6. 1616: 最长回文串(马拉车算法)
  7. 2020 阿里云原生实战峰会开幕 云原生落地的正确姿势
  8. 云湖共生,下一代数据湖来了?
  9. 视频 | 在小程序竞争激烈的今天,淘票票如何脱颖而出?
  10. 移动游戏市场爆发背后的游戏引擎战局