iOS程序猿之读取手机通讯录

IOS 最新通讯录和<Contacts/Contacts.h>框架 iOS 9 中,苹果介绍了新的 Contacts framework。允许用户使用 Objective-C 的 API 和设备的通讯录进行交互,同样适用于 Swift 语言。比起之前通过 AddressBook framework 来读取联系人信息来说,这是一个巨大的进步。因为 AddressBook framework 没有 Objective-C 的 API,非常难用,用 Swift 写的 阅读详情

读取手机通讯录

如今很多app都有读取手机联系人的需要,最近项目也遇到了类似的需求,这里整理下

从iOS开始,苹果废弃了以前复杂的AddressBookFramework,使用非常简单易用的Contacts Framework!

这里贴上两篇关于AddressBookFramework的博客,有兴趣的可以看看:

http://my.oschina.net/u/2340880/blog/407347

http://my.oschina.net/u/2340880/blog/407973

在Contacts Framework中,我们用到最多的就是从手机通讯录读取联系人,当然Contacts也可以向手机通讯录创建新的联系人,后面会提到!

读取联系人

引入框架:

#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>

核心代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    CNContactPickerViewController * con = [[CNContactPickerViewController alloc]init];
    con.delegate = self;
    [self presentViewController:con animated:YES completion:nil];
}

// 选择某一个联系人
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact
{
    CNPhoneNumber *phoneNumber = contact.phoneNumbers[0].value; // 电话号码
    
    NSString *emailStr = contact.emailAddresses[0].value; // 邮箱
    
    NSString *company = contact.organizationName; // 公司
    
    
    NSLog(@"姓名:%@%@\n电话:%@\n邮箱:%@\n公司:%@",contact.familyName, contact.givenName, phoneNumber.stringValue, emailStr, company);
}

搜索联系人

引入框架:

#import <Contacts/Contacts.h>

核心代码:

在开发中,提取联系人的使用率要远远高于创建联系人,ContactFramework提取联系人的方式,类似于数据库的检索方式,通过配置条件,提取出我们需要的数据,例如:

    CNContactStore * stroe = [[CNContactStore alloc]init];
    //检索条件,检索所有名字中有zhang的联系人
    NSPredicate * predicate = [CNContact predicateForContactsMatchingName:@"zhang"];
    //提取数据
    NSArray * contacts = [stroe unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];

keysToFetch是设置提取联系人的哪些数据,如上则只提取出检索联系人的名字。

同样,也可以通过请求的方式来对联系人进行遍历:

    CNContactStore * stroe = [[CNContactStore alloc]init];
    CNContactFetchRequest * request = [[CNContactFetchRequest alloc]initWithKeysToFetch:@[CNContactPhoneticFamilyNameKey]];
    [stroe enumerateContactsWithFetchRequest:request error:nil usingBlock:^(CNContact * _Nonnull contact, BOOL * _Nonnull stop) {
        NSLog(@"%@",contact);
    }];


对于Contacts Framework框架的详细介绍:

1、联系人对象:CNContact

这个对象是用来配置联系人信息的,有可变的CNMutaleContact和CNContact,区别用来读取和创建联系人。CNContact对象中有许多属性,对应联系人的一些信息。

首先,创建CNMutableContact对象:

 CNMutableContact * contact = [[CNMutableContact alloc]init];

设置联系人头像:

contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"Icon-114.png"]);

设置联系人姓名:

    //设置名字
    contact.givenName = @"jaki";
    //设置姓氏
    contact.familyName = @"zhang";

设置联系人邮箱:

     CNLabeledValue *homeEmail = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@"316045346@qq.com"];
     CNLabeledValue *workEmail =[CNLabeledValue labeledValueWithLabel:CNLabelWork value:@"316045346@qq.com"];
     contact.emailAddresses = @[homeEmail,workEmail];

这里需要注意,emailAddresses属性是一个数组,数组中是才CNLabeledValue对象,CNLabeledValue对象主要用于创建一些联系人属性的键值对应,通过这些对应,系统会帮我们进行数据的格式化,例如CNLabelHome,就会将号码格式成家庭邮箱的格式,相应的其他键如下:

//家庭
CONTACTS_EXTERN NSString * const CNLabelHome                             NS_AVAILABLE(10_11, 9_0);
//工作
CONTACTS_EXTERN NSString * const CNLabelWork                             NS_AVAILABLE(10_11, 9_0);
//其他
CONTACTS_EXTERN NSString * const CNLabelOther                            NS_AVAILABLE(10_11, 9_0);

// 邮箱地址
CONTACTS_EXTERN NSString * const CNLabelEmailiCloud                      NS_AVAILABLE(10_11, 9_0);

// url地址
CONTACTS_EXTERN NSString * const CNLabelURLAddressHomePage               NS_AVAILABLE(10_11, 9_0);

// 日期
CONTACTS_EXTERN NSString * const CNLabelDateAnniversary                  NS_AVAILABLE(10_11, 9_0);

设置联系人电话:

contact.phoneNumbers = @[[CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberiPhone value:[CNPhoneNumber phoneNumberWithStringValue:@"12344312321"]]];

联系人电话的配置方式和邮箱类似,键值如下:

CONTACTS_EXTERN NSString * const CNLabelPhoneNumberiPhone                NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberMobile                NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberMain                  NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberHomeFax               NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberWorkFax               NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberOtherFax              NS_AVAILABLE(10_11, 9_0);
CONTACTS_EXTERN NSString * const CNLabelPhoneNumberPager                 NS_AVAILABLE(10_11, 9_0);

这里的CNPhoneNumber对象也是iOS9中的一个新的类,专门用来创建电话号码,之中方法如下:

@interface CNPhoneNumber : NSObject <NSCopying, NSSecureCoding>

//通过类方法创建
+ (instancetype)phoneNumberWithStringValue:(NSString *)stringValue;
//通过初始化方法创建
- (instancetype)initWithStringValue:(NSString *)string;

@property (readonly, copy, NS_NONATOMIC_IOSONLY) NSString *stringValue;

@end

设置联系人地址:

  CNMutablePostalAddress * homeAdress = [[CNMutablePostalAddress alloc]init];
    homeAdress.street = @"贝克街";
    homeAdress.city = @"伦敦";
    homeAdress.state = @"英国";
    homeAdress.postalCode = @"221B";
    contact.postalAddresses = @[[CNLabeledValue labeledValueWithLabel:CNLabelHome value:homeAdress]];

设置生日:

NSDateComponents * birthday = [[NSDateComponents  alloc]init];
    birthday.day=7;
    birthday.month=5;
    birthday.year=1992;
    contact.birthday=birthday;

2、创建添加联系人请求:CNSaveRequest

CNSaveRequest是用于存储联系人的请求类,通过这个类,我们可以创建批量添加、修改或者删除联系人的请求,例如添加上面我们创建的联系人对象:

   //初始化方法
    CNSaveRequest * saveRequest = [[CNSaveRequest alloc]init];
    //添加联系人
    [saveRequest addContact:contact toContainerWithIdentifier:nil];

这个类中还有许多方便我们操作的方法:

@interface CNSaveRequest : NSObject
//添加一个联系人
- (void)addContact:(CNMutableContact *)contact toContainerWithIdentifier:(nullable NSString *)identifier;

//更新一个联系人
- (void)updateContact:(CNMutableContact *)contact;
//删除一个联系人
- (void)deleteContact:(CNMutableContact *)contact;
//添加一组联系人
- (void)addGroup:(CNMutableGroup *)group toContainerWithIdentifier:(nullable NSString *)identifier;
//更新一组联系人
- (void)updateGroup:(CNMutableGroup *)group;
//删除一组联系人
- (void)deleteGroup:(CNMutableGroup *)group;
//向组中添加子组
- (void)addSubgroup:(CNGroup *)subgroup toGroup:(CNGroup *)group NS_AVAILABLE(10_11, NA);
//在组中删除子组
- (void)removeSubgroup:(CNGroup *)subgroup fromGroup:(CNGroup *)group NS_AVAILABLE(10_11, NA);
//向组中添加成员
- (void)addMember:(CNContact *)contact toGroup:(CNGroup *)group;
//向组中移除成员
- (void)removeMember:(CNContact *)contact fromGroup:(CNGroup *)group;

@end

3、进行联系人的写入操作:CNContactStore

CNContactStore是一个用于存取联系人的上下文桥梁,现在,把我们创建的添加联系人的请求写入:

    CNContactStore * store = [[CNContactStore alloc]init];
    [store executeSaveRequest:saveRequest error:nil];

在模拟器上运行程序,打开联系人,效果如下:

联系人界面:

技术分享

联系人详情:

技术分享



4、获取格式化的联系人信息

iOS9中,ContactFramework也为开发者提供了非常方便的格式化信息的方法,还拿我们上面创建的联系人对象举例:

1、获取格式化的联系人姓名
    NSString * foematter =[CNContactFormatter stringFromContact:contact style:CNContactFormatterStyleFullName];
    NSLog(@"%@",foematter);

这个运行后会打印出jaki zhang,其中style风格枚举如下:

typedef NS_ENUM(NSInteger, CNContactFormatterStyle)
{
    //获取全名
    CNContactFormatterStyleFullName,
   //获取拼音全名
    CNContactFormatterStylePhoneticFullName,
} NS_ENUM_AVAILABLE(10_11, 9_0);
2、获取格式化的联系人地址
    NSString * foematter =[CNPostalAddressFormatter stringFromPostalAddress:homeAdress style:CNPostalAddressFormatterStyleMailingAddress];
    NSLog(@"%@",foematter);

打印如下:

技术分享

5、ContactFramework UI相关

iOS9中,系统也为我们封装好了一套联系人的UI界面,用起来也十分方便,主要新增的controller有两个:

CNContactPickerViewController:展示联系人列表的controller

CNContactViewController:展示联系人详细信息的controller

示例如下:

弹出联系人列表:

    CNContactPickerViewController * con = [[CNContactPickerViewController alloc]init];
    [self presentViewController:con animated:YES completion:nil];

效果如下:

技术分享

联系人逻辑的相关处理主要在CNContactPickerDelegate中完成:

//视图取消时 调用的方法
- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker;
//选中与取消选中时调用的方法
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContacts:(NSArray<CNContact*> *)contacts;
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperties:(NSArray<CNContactProperty*> *)contactProperties;

CNContactViewController则是用来显示具体联系人的详细信息的,比如:

    CNContactViewController * con = [CNContactViewController viewControllerForContact:contact];
    [self presentViewController:con animated:YES completion:nil];

相关代理回调函数如下:

//将要展示联系人信息与已经展示联系人信息的回调
- (BOOL)contactViewController:(CNContactViewController *)viewController shouldPerformDefaultActionForContactProperty:(CNContactProperty *)property;
- (void)contactViewController:(CNContactViewController *)viewController didCompleteWithContact:(nullable CNContact *)contact;



iOS通讯录获取与展示实战指南 在移动应用开发中,访问和使用用户手机通讯录是一项常见需求,尤其是在社交、沟通和生产力类应用中。对于iOS应用开发者来说,借助Apple提供的Contacts框架,可以方便地实现对通讯录数据的访问。在深入了解如何获取和使用iOS通讯录数据之前,我们需要先了解iOS通讯录访问的权限授权机制,以及如何在遵守隐私政策的前提下进行合理开发。在开发iOS应用时,我们经常需要访问用户的通讯录信息,以便提供更加个性化和相关的服务。 阅读详情

相关推荐

ContactsFramework的Demo(Swift,通讯录)

Swift访问通讯录的简单例子,简单介绍了ContactsFramework和ContactsUI Framework

iOS9全新的联系人相关框架——Contacts Framework

一、引言         在以前iOS开发中,涉及联系人相关的编程,代码都非常繁琐,并且框架的设计也不是Objective-C风格的,这使开发者用起来非常的难受。在iOS9中,apple终于解决了这个问题,全新的Contacts Framework将完全替代AddressBookFramework,AddressBookFramework也将成为历史被弃用。至于AddressBookFr

Hchq_99的专栏 2031

PotPlayer终极画质调校:深入MadVR渲染器设置,让你的显示器发挥100%潜力

本文深入探讨了如何通过MadVR渲染器优化PotPlayer的画质设置,充分发挥高端显卡和显示器的潜力。从色彩空间匹配、色深优化到HDR元数据处理,提供了一套完整的配置指南,帮助用户实现影院级视觉体验。特别适合拥有NVIDIA RTX或AMD RX系列显卡的用户进行精细调校。

weixin_42530458的博客 600

IOS开发中使用CNContact\CNMutableContact 对通讯录增删改查

IOS开发中使用CNContact\CNMutableContact对通讯录增删改查 首先当然是把CNcontact包含在工程中: 1 @import Contacts; 1、下面是增加联系人的程序段: 1 CNMutableContact * contact = [[CNMutableContact alloc]init]; 2 cont...

aibiao0099的博客 1937

C++,使用Qt设计一个登录窗口

使用Qt设计一个登录界面

heyu0311的博客 2991

SPAD 单光子雪崩二极管

SPAD,全称为,是一种高灵敏度的光电探测器件,能够在非常低的光照水平下检测单个光子。SPAD在工作时,当一个光子被探测器吸收后,能够触发一个雪崩效应,产生一个可以被检测到的电信号。

qq_42786033的博客 1万+

iOS 9.0以后 通讯录详解

一、通讯录框架 1、ContactsUI.framework 框架。 拥有 AddressBookUI.framework 框架的所有功能,使用起来更加的面向对象。(iOS 9 之前的使用的) 2、Contacts.framework 框架。 拥有 AddressBook.framework 框架的所有功能,不再是 C 语言的 API,使用起来非常简单。((iOS 9 之前的使用的)) 二、CNContactUI 一、CNContactPickerViewContro...

cym_bj 2102

大智慧L2实时api接口的逐笔委托功能执行代码分享

用过l2行情接口的投资者应该都了解大部分的接口都是有逐笔委托功能的,那么大智慧L2实时api接口也有着很强大的逐笔委托功能,投资者可以通过这个逐笔委托功能可以看到一个股票的每天出现的全部委托指令,那么在这个逐笔委托功能里包含了委托价格、委托时间、委托量和委托方向四个要素!那么接下来小编就分享一下大智慧L2实时api接口的逐笔委托功能执行代码!那么在这里提个醒:投资者可以在大智慧L2实时api接口进行设置过滤,在逐笔委托列表里,就仅仅只会显示超过设置委托量或委托额的委托单,而不再显示小单。

Qq_2037696191的博客 3732

iOS获取手机通讯录(两种框架详解)

今天浏览简书,看了好多获取通讯录的,都是使用AddressBook.framework框架,没有使用Contacts.framework框架的,虽然这两种框架都可以获得手机里的通讯录信息,可是,官方API上说AddressBook.framework在iOS9被弃用了,弃用了,弃用了(重要是的事说三遍),又可是,不知道为什么目前使用AddressBook.framework在iOS9系统上依然可以

程序猿开发日志【学习永无止境】 1万+

手把手教你用Docker快速部署开源MES系统(附避坑指南)

本文提供了一份详细的实战指南,手把手教你使用Docker容器化技术快速部署开源MES系统。内容涵盖从环境准备、项目选型、数据库配置到应用服务器优化、前端部署及生产环境监控的全流程,并附有避坑指南,旨在帮助中小制造企业IT人员和开发者低成本、高效率地构建智能制造解决方案。

f0g1h2的博客 1059

Ubuntu 20.04 + CARLA 0.9.13 长时运行崩溃?手把手教你定位和缓解Segmentation fault

本文详细解析了Ubuntu 20.04环境下CARLA 0.9.13仿真平台长时运行崩溃问题,提供了从内存监控到核心转储分析的系统级诊断方法,并分享内存泄漏缓解、稳定性优化配置等实用解决方案,帮助开发者构建更稳定的自动驾驶仿真环境。

weixin_28362173的博客 253

iOS获取手机通讯录

一、address框架 1、有UI - (void)touchesBegan:(NSSetUITouch *> *)touches withEvent:(UIEvent *)event { ABPeoplePickerNavigationController * peoplePickerNav = [ABPeoplePickerNavigationController new];

bug小码的博客 679

微信小程序 - 详解苹果ios手机请求不到数据访问不了接口,但安卓却可以正常访问。wx.request苹果手机IOS请求失败、安卓可以请求成功(微信小程序上线后苹果手机不能访问接口,网络请求失败排查)

微信小程序上线后,苹果手机请求不到数据,安卓可以,微信小程序,安卓可以调接口,苹果调不了的解决方案,微信小程序:IOS访问不了接口,安卓可以正常访问,微信小程序ios版本连接不了服务器,小程序Android可以请求,ios请求失败wx.request,成功上线的小程序,安卓机可以正常访问使用,苹果微信小程序不执行请求,苹果系统无法加载数据,微信小程序 iOS 网络失败,微信小程序接口请求在ios端报错,苹果手机真机调试微信小程序出现网络请求失败,微信小程序 安卓正常 ios调接口显示网络请求失败,微信小程序

🏆 前端领域优质创作者 4361

与苹果斗争,可以不优雅,但要有用

苹果一直顽固地控制着iPhone的用户体验,通过封闭的操作系统和中心化的分发机制,还有技术上著名的“沙盒机制”。这个机制下一个App只能读取为它自己创建的文件夹,要访问其他App的内容都需要经过授权。这很好地保护了用户隐私,确保了iOS系统的安全,不过也有弊端:不少App都需要访问别的内容才能起作用。最知名的是输入法,到iOS 8之后才开放给第三方,中文用户苦苦等了7年。还有许多在Android上...

weixin_40192258的博客 110

S32DS S32K312 LPSPI + DMA配置异步SPI

配置DMA->Specific Configuration->Dma Logic Channel->Configuration->Global。SpiPhyUnitMapping:将该配置Mapping到某一路Spi,此工程配置为Spi1,遂选择LPSPI_1。配置的该路SPI的片选ID,此处ID对应配置Pin脚时lpspi_pcs后的下表(本工程此处为PCS3)配置该路SPI对应的SPI硬件单元ID,本工程配置为Lpspi1,因此配置为CSIB1。首先配置SPI的Pin脚,此处使用的是LPSPI_1。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 2363

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

iOS获取通讯录的方法

iOS中通讯录的用法。CNContactStore类是iOS中的一个框架,用于访问和管理设备上的通讯录数据。它提供了一种统一的方式来获取、添加、更新和删除联系人和群组,以及监听通讯录数据的变化。在iOS开发中,CNContactStore类具有重要性,因为它允许应用程序与设备上的通讯录进行交互,从而实现诸如获取联系人信息、同步联系人数据、发送通讯录相关的通知等功能。通过CNContactStore类,开发人员可以轻松地构建与通讯录相关的功能,提高应用程序的用户体验和功能性。

我叫柱子哥 4659

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

iOS 获取通讯录的4种方式详解

目录(?)[+] 使用场景 一些App通过手机号码来推荐好友,如 微博、支付宝 首先客户端会获取通讯录中的所有手机号然后将这些手机号提交到App服务器中,服务器会查找每个手机号对应的App账号如QQ号码返回到客户端,然后客户端根据服务器返回的账号列表来推荐好友。 获取联系人方式 方案一:AddressBookUI.framework框架  提供了联系人列表界

xiaohe901216的专栏 3万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

iOS开发进阶-Contacts/ContactUI学习和使用

Contacts FrameWork是苹果推出的新联系人框架。应用于iOS 9.0之后,9.0之后将会全面取代Address Book 。用过Address Book 的开发者都应该能理解苹果为何要弃用它了。一方面对于开发者实在不是很友好,语法怪怪的。另一方面,作者猜测可能是线程安全方面做得不够好,所以苹果打算有所改进。本文将阐述Contacts和ContactsUI的基本原理和基本用法。

JoySeeDog 1万+

ios 简书 获取通讯录信息_iOS读取通讯录

iOS读取通讯录中的各种信息//读取所有联系人-(void)ReadAllPeoples{//取得本地通信录名柄ABAddressBookRef tmpAddressBook = nil;if ([[UIDevice currentDevice].systemVersion floatValue]>=6.0) {tmpAddressBook=ABAddressBookCreateWithOp...

weixin_39694838的博客 209

iOS开发------获取系统联系人(Contacts篇)

Contacts.framework是Apple在 iOS9.0 替代AddressBook.framework的框架,至于AddressBook是做什么的框架,楼主默认看到博文的开发者是知道的 O(∩_∩)O。如果想了解AddressBook的使用欢迎查看一下楼主之前关于AddressBook的博文,本篇不做过多的缀余: iOS开发——获取系统联系人(AddressBook篇) iOS开发—

RITL_Y 8764

Contacts(实战)

Contacts实战介绍

路漫漫其修远兮,吾将上下而求索! 1139

iOS9 联系人 ContactFramework

摘要 iOS9新的联系人相关框架更加易用美观。 iOS9 联系人 ContactFramework 感觉整理的很好,没有把效果图复制过来 转:http://my.oschina.net/u/2340880/blog/511995?p={{totalPage}}一、引言 在以前iOS开发中,涉及联系人相关的编程,代码都非常繁琐,并且框架的设计也不是Objective-C风格的,这使开发者用

u013196181的博客 2305

iOS---iOS9中获取通讯录的方法:Contacts. framework简单使用

1.首先创建CNContactStore对象,主要用来获取和保存通讯录: //创建CNContactStore对象,用与获取和保存通讯录信息 CNContactStore *contactStore = [[CNContactStore alloc] init]; 2.用户授权: if ([CNContactStore authorizationStatusForEntityType

xiaolei122333的博客 3966

iOS9通讯录框架Contacts的简单使用

iOS9通讯录框架Contacts的简单使用 第一步,导入Contacts框架,import Contacts ,这个是不带UI的框架,可以直接获取联系人 // 检查状态 let status: CNAuthorizationStatus = CNContactStore.authorizationStatusForEntityType(CNEntityType.Contact

WJ的博客 4469

Contacts.framework iOS9新的类,用来替代AddressBook

苹果官方文档,用的是Swift https://developer.apple.com/library/ios/documentation/Contacts/Reference/Contacts_Framework/index.html#//apple_ref/doc/uid/TP40015328 这里记录一下自己的使用情况,仅作记录,还有很多不清楚的地方。 CNContact...

174

iOS 通讯录开发的所有姿势

通讯录简介 通讯录使用场景: 电商类的 App,设置收货人电话号码。 即时通讯类 App,添加手机联系人好友。 通讯录获取方案: 一、iOS 9 以前的通讯录框架 AddressBookUI.framework框架 提供了联系人列表界面、联系人详情界面、添加联系人界面等。 一般用于选择联系人。 AddressBook.framework框架 纯 C 语言的 API,仅仅是获得联系人数据。 没有提供 UI 界面展示,需要自己搭建联系人展示界面。 里面的数据类..

u013712343的博客 2612
上一篇: iOS程序猿之图片压缩
下一篇: iOS程序猿之毛玻璃效果
iOS_wq
博客等级 码龄11年 10粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值