OC:通讯录实战
实战(使用OC的知识制作一个简易通讯录)
//语法糖、笑笑语法
// NSString * string = [NSString stringWithFormat:@"string"];
NSString * str = @"string";
NSLog(@"%@",str);
//上面的两种写法是一样的,是字符串的简单写法
// NSArray * arr = [NSArray arrayWithObjects:@"yuansu",@"yuansu2", nil];
NSArray * arr1 = @[@"",@""];
// NSLog(@"%@",dic);
NSDictionary * dic1 =@{@"key0":@"value0",@"key1":@"value1",@"key2":@"value2"};
//笑笑语法创建的集合都是不可变的对象
//不可变转变为可变
NSMutableDictionary * dic = [dic1 mutableCopy];
NSMutableArray * arr = [arr1 mutableCopy];
NSMutableString * strr = [str mutableCopy];
NSLog(@"%@ %@ %@",dic,arr,strr);
笑笑语法
下面写法都是一样的代表判断为空
if (str == nil) {
<#statements#>
}
if (!str) {
<#statements#>
}
*/ /*
array1 == nil; 数组的对象的空间没有开辟 没有这个对象
[array count] == 0; 数组对象存在,只是数组对象里面没有一个元素
*/ /*
str = nil; 对象为空
[str length] == 0;数组存在,但是没有元素
所以以后使用对象的时候,一定要为对象开辟空间,特别是数组字典这种集合,在进行存值或者其他操作时候,不要忘记开辟空间
*/ /*
NSMutableDictionary * dic = @{@"key1":@"value1",@"key2":@"value2"};
dic [@"key1"];//等于写法:[dic objectForKey:@"key1"]
arr [1];//等于写法:[arr objectAtInde:1]
*/
是否为空的判断
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
printf("创建一个26个数组分别对应一个字典的key值\n");
NSMutableArray * a = [[NSMutableArray alloc]initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z", nil];
NSMutableDictionary * aDic = [[NSMutableDictionary alloc]initWithCapacity:[a count]];
for (NSString *p in a) {
NSMutableArray *arr = [NSMutableArray array];
[aDic setObject:arr forKey:p];
}
NSLog(@"%@",aDic);
}
return ;
}
创建一个字典有26个键分别为A-Z
通讯录实战:
#import <Foundation/Foundation.h>
#import "Contact.h"
#import "AddressBook.h" int main(int argc, const char * argv[]) {
@autoreleasepool { AddressBook * book = [[AddressBook alloc]init];
//添加联系人
Contact *lanou39 = [[Contact alloc]initWithName:@"AAA" gender:@"man" phonenum:@"" address:@"uc"];
Contact *lanou38 = [[Contact alloc]initWithName:@"BBB" gender:@"gril" phonenum:@"" address:@"china"];
//forin 也叫快速枚举,就是遍历容器或者遍历集合,在遍历的过程中容器中不能修改,如果需修改可用for循环替代
[book addContact:lanou39];
[book addContact:lanou38];
[book displayAllContacs];
[book deleteContactWithName:@"niujianwei"];
[book deleteContactWithName:@"Yingjie"];//如果删除有同名的,只能删除一个
NSMutableArray * forAll = [book allContactWithGroupName:@"N"];
NSLog(@"获取N分组的联系人:%@",forAll);
[book displayAllContacs];
NSMutableArray * grilarr = [book getAllFemaContact];
NSLog(@"所有的女性为 :%@",grilarr);
Contact * phone = [book getContactWithPhoneNum:@""];
NSLog(@"电话为13523526302的联系人信息为:%@",phone); /*可删代码(所有的方法都在main函数里写的)
// //添加联系人
// Contact * newPer = [[Contact alloc]initWithName:@"new" gender:@"man" phonenum:@"1245879" address:@"newPlace"];
// NSString * name = [newPer name];
// NSString * phonenum = [newPer phonenmu];
// if (!name || ![name length]|| !phonenum || ![phonenum length]) {
// NSLog(@"添加失败");
// }
// else{
// //获取名字首字母
// NSString * firstChar = [[name substringToIndex:1]capitalizedString];
// //获取对应分组
// NSMutableArray * groupArr = [contactDic objectForKey:firstChar];
// if (!groupArr) {
// //如果分组不存在,添加对应的分组
// groupArr = [NSMutableArray array];
// [contactDic setObject:groupArr forKey:firstChar];
// }
// //添加新的联系人
// [groupArr addObject:newPer];
// }
// NSLog(@"%@",contactDic);
// //获取某个分组的所有联系人(Y)
// NSMutableArray * arr = [contactDic objectForKey:@"Y"];
// NSLog(@"Y分组联系人:%@",arr);
// //根据电话号码搜索联系人
// for (NSString * key in contactDic) {
// NSMutableArray * groupArr = [contactDic objectForKey:key];
// for (Contact *contact in groupArr) {
// if ([[contact phonenmu] isEqualToString:@"1245879"]) {
// NSLog(@"%@",contact);
// }else{
// NSLog(@"没有此人");
// }
// }
// }
// //找到所有女性联系人
// NSMutableArray * grilArr = [NSMutableArray array];
// for (NSString * key in contactDic) {
// NSMutableArray * groupArr = [contactDic objectForKey:key];
// for (Contact * contact in groupArr) {
// if ([[contact gender]isEqualToString:@"gril"]) {
// [grilArr addObject:contact];
// }
// }
// }
// NSLog(@"女性联系人:%@",grilArr);
// //根姓名删除联系人
// for (NSString * key in contactDic) {
// NSMutableArray * group = contactDic[key];
// //遍历联系人分组
// for (int i = 0; i < group.count; i++) {
// Contact * contact = group[i];
// if ([[contact name] isEqualToString:@"niu"]) {
// //从对应分组中删除联系人
// [group removeObjectAtIndex:i];//打方法的时候要注意刚才就写错了
// break;
// }
// }
// }
// //删除某个分组的联系人
// [contactDic removeObjectForKey:@"X"];
// NSLog(@"%@",contactDic);
// //展示所有联系人
// NSLog(@"%@",contactDic);//打印字典所有的联系人都会打印
// //
*/
}
return ;
}
mian()函数文件
main
#import <Foundation/Foundation.h> @interface Contact : NSObject
{
NSString * _name;
NSString * _gender;
NSString * _phonenum;
NSString * _address;
NSString * _groupName;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setGender:(NSString *)gender;
- (NSString *)gender;
- (void)setPhoneNmu:(NSString *)phonenum;
- (NSString *)phonenmu;
- (void)setAddress:(NSString *)address;
- (NSString *)address;
- (void)setGroupName:(NSString *)GroupName;
- (NSString *)GroupName; - (id)initWithName:(NSString *)name
gender:(NSString *)gender
phonenum:(NSString *)phonenum
address:(NSString *)address;
//显示信息
- (void)displayContactInfo;
//描述
- (NSString *)description;
@end
Contact.h
#import "Contact.h" @implementation Contact
- (void)setName:(NSString *)name{
_name = name;
}
- (NSString *)name{
return _name;
}
- (void)setGender:(NSString *)gender{
_gender = gender;
}
- (NSString *)gender{
return _gender;
}
- (void)setPhoneNmu:(NSString *)phonenum{
_phonenum = phonenum;
}
- (NSString *)phonenmu{
return _phonenum;
}
- (void)setAddress:(NSString *)address{
_address = address;
}
- (NSString *)address{
return _address;
}
- (void)setGroupName:(NSString *)GroupName{
_groupName = GroupName;
}
- (NSString *)GroupName{
return _groupName;
} - (id)initWithName:(NSString *)name
gender:(NSString *)gender
phonenum:(NSString *)phonenum
address:(NSString *)address{
self = [super init];
if (self) {
_name = name;
_address = address;
_phonenum = phonenum;
_gender = gender; }
return self;
}
- (void)displayContactInfo{
NSLog(@"姓名:%@ 性别:%@ 电话:%@ 地址:%@ 分组 %@",_name,_gender,_phonenum,_address,_groupName);
}
- (NSString *)description{
return [NSString stringWithFormat:@"%@ %@ %@ %@ %@",_name,_gender,_address,_phonenum,_groupName];
}
@end
Contact.m
#import <Foundation/Foundation.h>
#import "Contact.h" //接口(就是声明的一些方法)
@interface AddressBook : NSObject
//getter
- (NSMutableDictionary *)allContacts;
//添加新的联系人
- (void)addContact:(Contact *)contact;
//获取某个分组的联系人
- (NSMutableArray * )allContactWithGroupName:(NSString *)groupName;
//根据电话号码搜索联系人
- (Contact *)getContactWithPhoneNum:(NSString *)phoneNum;
//获取所有的女性联系人
- (NSMutableArray *)getAllFemaContact;
//根据姓名删除联系人
- (void)deleteContactWithName:(NSString *)name;
//删除某个分组的全部联系人
- (void)deleteAllContactsWithGroupName:(NSString *)groupName;
//展示通讯录中的所有联系人
- (void)displayAllContacs;
//初始化重写
- (id)init;
//自定义初始化方法
- (id)initWithDic;
@end
AddressBook.h
#import "AddressBook.h" @implementation AddressBook
{
NSMutableDictionary * _allContacts;//存储所有的联系人
}
//getter
- (NSMutableDictionary *)allContacts{
return _allContacts;
}
//自定义初始化方法
- (id)initWithDic{
self = [super init];
if (self) {
Contact *yingjie = [[Contact alloc]initWithName:@"Yingjie" gender:@"man" phonenum:@"" address:@"US" ];
Contact *ying = [[Contact alloc]initWithName:@"Ying" gender:@"man" phonenum:@"" address:@"US" ];
Contact *zhang = [[Contact alloc]initWithName:@"Zhang" gender:@"man" phonenum:@"" address:@"US" ];
Contact *huang = [[Contact alloc]initWithName:@"Huang" gender:@"man" phonenum:@"" address:@"US" ];
Contact *liu = [[Contact alloc]initWithName:@"Liuxian" gender:@"gril" phonenum:@"" address:@"US" ];
Contact *niu = [[Contact alloc]initWithName:@"Niu" gender:@"man" phonenum:@"" address:@"US" ];
//创建分组
NSMutableArray * yArr = [NSMutableArray arrayWithObjects:yingjie,ying, nil];
NSMutableArray * zArr = [NSMutableArray arrayWithObjects:zhang, nil];
NSMutableArray * hArr = [NSMutableArray arrayWithObjects:huang, nil];
NSMutableArray * lArr = [NSMutableArray arrayWithObjects:liu, nil];
NSMutableArray * nArr = [NSMutableArray arrayWithObjects:niu, nil];
//把分组名称放到对应的字典(管理所有分组联系人)
_allContacts = [NSMutableDictionary dictionaryWithObjectsAndKeys:yArr,@"Y",zArr,@"Z",hArr,@"H",lArr,@"",nArr,@"N",lArr,@"L", nil ]; }
return self;
}
//添加新的联系人
- (void)addContact:(Contact *)contact{
if (![contact name]||![[contact name]length]|| ![contact phonenmu]||![[contact phonenmu]length]) {
NSLog(@"添加失败");
}else{
NSString * name = [contact name];
NSString * fristCahr = [[name substringToIndex:]capitalizedString];
NSMutableArray * group = [_allContacts objectForKey:fristCahr];
if (!group) {
group = [NSMutableArray array];
[group addObject:contact];
[_allContacts setObject:group forKey:fristCahr];
}
[group addObject:contact];
}
} //获取某个分组的联系人
- (NSMutableArray * )allContactWithGroupName:(NSString *)groupName{
return [_allContacts objectForKey:groupName];
}
//根据电话号码搜索联系人
- (Contact *)getContactWithPhoneNum:(NSString *)phoneNum{
for (NSString * key in _allContacts) {
NSMutableArray * group = _allContacts[key];
for (Contact *contact in group) {
if ([[contact phonenmu] isEqualToString:phoneNum]) {
return contact;
}
}
}
return nil;
}
//获取所有的女性联系人
- (NSMutableArray *)getAllFemaContact{
NSMutableArray * girlArr = [NSMutableArray array];
for (NSString * key in _allContacts) {
NSMutableArray * group = _allContacts[key];
for (Contact * contact in group) {
if ([[contact gender]isEqualToString:@"gril"]) {
[girlArr addObject:contact];
return contact;
}
}
}
return nil;
}
//根据姓名删除联系人
- (void)deleteContactWithName:(NSString *)name{
//获取姓名的首字母
NSString * first = [[name substringToIndex:]capitalizedString];
//获取联系人分组
NSMutableArray * group = [_allContacts objectForKey:first];
for (Contact *contact in group) {//不能对容器做更改
if ([[contact name]isEqualToString:name]) {
[group removeObject:contact];//如果是我们要找的人那就删除
NSLog(@"删除一条数据成功");
break;
}
}
}
//删除某个分组的全部联系人
- (void)deleteAllContactsWithGroupName:(NSString *)groupName{
[_allContacts removeObjectForKey:groupName];
NSLog(@"成功删除分组%@",groupName);
}
//展示通讯录中的所有联系人
- (void)displayAllContacs{
NSLog(@"%@",_allContacts);
}
//重写init 方法
- (id)init{
self = [super init];
if (self) {
//存储联系人
//建立联系人对象
Contact *yingjie = [[Contact alloc]initWithName:@"Yingjie" gender:@"man" phonenum:@"" address:@"US" ];
Contact *ying = [[Contact alloc]initWithName:@"Ying" gender:@"man" phonenum:@"" address:@"US" ];
Contact *zhang = [[Contact alloc]initWithName:@"Zhang" gender:@"man" phonenum:@"" address:@"US" ];
Contact *huang = [[Contact alloc]initWithName:@"Huang" gender:@"man" phonenum:@"" address:@"US" ];
Contact *liu = [[Contact alloc]initWithName:@"Liuxian" gender:@"gril" phonenum:@"" address:@"US" ];
Contact *niu = [[Contact alloc]initWithName:@"Niu" gender:@"man" phonenum:@"" address:@"US" ];
//创建分组
NSMutableArray * yArr = [NSMutableArray arrayWithObjects:yingjie,ying, nil];
NSMutableArray * zArr = [NSMutableArray arrayWithObjects:zhang, nil];
NSMutableArray * hArr = [NSMutableArray arrayWithObjects:huang, nil];
NSMutableArray * lArr = [NSMutableArray arrayWithObjects:liu, nil];
NSMutableArray * nArr = [NSMutableArray arrayWithObjects:niu, nil];
//把分组名称放到对应的字典(管理所有分组联系人)
_allContacts = [NSMutableDictionary dictionaryWithObjectsAndKeys:yArr,@"Y",zArr,@"Z",hArr,@"H",lArr,@"L",nArr,@"N", nil ];
}
return self;
}
@end
AddressBook.m
OC:通讯录实战的更多相关文章
- OC通讯录选择封装
ContactsService.h代码 #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> //block返回选 ...
- h5-29-WEB存储-通讯录实战.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 16-6 WEB存储-通讯录实战
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- iOS 之 OC开发实战
iOS 开发之登陆 iOS 程序初始一个带导航栏的视图 iOS 添加导航栏两侧按钮 iOS UITabBar
- 实战项目:通讯录 UI—第十一天
1.推出视图的两种方式: 1.通过导航控制器push到下一个界面,使用pop返回到上一个界面 2.通过模态的形式推出视图,不需要依赖于导航控制器,通过使用present到下一个界面,通过dismi ...
- Swift 简单的通讯录
Swift 通讯录实战 1.功能需求 整个项目由三个界面构成:首页面(全部联系人),添加联系人界面和联系人详情界面 整个项目使用纯代码编程 数据处理方面使用一个工具类,处理所有数据的增删改查. 首页由 ...
- iOS 程序开发
准备 iOS 开发 之 编程知识点 iOS 程序调试 iOS 之 OC开发实战 iOS 架构模式 iOS 之 新功能.扩展
- WEB学习路线2019完整版(附视频教程+网盘下载地址)
WEB学习路线2019完整版(附视频教程+网盘下载地址).适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利.高薪水的职业了.所以现在学习web前端开发的技术人员也是 ...
- iOS开发——高级技术精选OC篇&Runtime之字典转模型实战
Runtime之字典转模型实战 如果您还不知道什么是runtime,那么请先看看这几篇文章: http://www.cnblogs.com/iCocos/p/4734687.html http://w ...
随机推荐
- phonegap配置启动动画
以下有2种方式 1 主Active中 onCreate函数里添加代码 2 config.xml文件进行配置(对通过命令行模式下cordova命令行生成的可行) 确保自己安装了SplashScreen插 ...
- java监测方法运行时间/效率方法
前言: 这周在写一个小项目,虽然小但是是纯调外部接口的,调完了接口还不停的循环接口返回的数据(已转换JSONArray),然后再判断值,再做不同处理,关键是数据量还比较大,这刚做完还没开始上线,测试也 ...
- 剑指offer-第二章算法之斐波拉契数列(青蛙跳台阶)
递归与循环 递归:在一个函数的内部调用这个函数. 本质:把一个问题分解为两个,或者多个小问题(多个小问题相互重叠的部分,会存在重复的计算) 优点:简洁,易于实现. 缺点:时间和空间消耗严重,如果递归调 ...
- 大数据时代的技术hive:hive介绍
我最近研究了hive的相关技术,有点心得,这里和大家分享下. 首先我们要知道hive到底是做什么的.下面这几段文字很好的描述了hive的特性: 1.hive是基于Hadoop的一个数据仓库工具,可以将 ...
- nodejs的调试(node-inspector)
我们在接触客户端javascript的时候,调试利器就是firebug ,也是当年为何喜欢用上firefox 浏览器的主要动力,当然,后来 chrome 插件里也出现了firebug的身影..... ...
- 支持 MBTiles 规范的预缓存
SuperMap iServer 支持生成符合MBTiles规范的预缓存(MBTiles是由MapBox制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用,管理和分享的规范. 该规范由Ma ...
- 25个有用的jQuery日历和日期选取插件
jQuery被认为是最好的JavaScript库,因为它简单易用.灵活,并有大量的插件.本文介绍25个非常不错的jQuery日历和日期选取插件,希望对各位有用. 1. Simple JQuery Da ...
- Textbox像百度一下实现下拉显示 z
List<string> Data = new List<string>(); string Randomstr = "功夫撒黑胡椒hcbvf蜂窝qwertyuiop ...
- Delphi VclSkin使用教程
1. TSkinData TSkinData 主要用于美化你的程序, 只要把TSkinData控件放下去,它就能自动美化所有窗体. 属性 Active: 使用或取消对程序的美化. DisableT ...
- asp.net使用httphandler打包多CSS或JS文件以加快页面加载速度
介绍 使用许多小得JS.CSS文件代替一个庞大的JS或CSS文件来让代码获得更好的可维 护性,这是一个很好的实践.但这样做反过来却损失了网站的性能.虽然你应该将你的Javascript代码写在小文件中 ...