简单地址簿?
2014-07-15 18:58
246 查看
AddressCard.h
#import <Foundation/Foundation.h> @interface AddressCard : NSObject { NSString *_name; NSString *_eMail; } @property(nonatomic,copy)NSString *name,*eMail; //-(void)setName:(NSString *)aName; //-(NSString *)name; //-(void)setEMail:(NSString *)aEMail; //-(NSString *)eMail; -(void)setName:(NSString *)aName andEmail:(NSString *)aEmail; -(void)print; -(NSComparisonResult)compareName:(id)element; @end
AddressCard.m
#import "AddressCard.h" @implementation AddressCard /* -(void)setName:(NSString *)aName { if (_name != aName) { _name = [NSString stringWithString:aName]; } } -(NSString *)name { return _name; } -(void)setEMail:(NSString *)aEMail { if(_eMail != aEMail) { _eMail = [NSString stringWithString:aEMail]; } } -(NSString *)eMail { return _eMail; } */ @synthesize name = _name,eMail = _eMail; -(void)setName:(NSString *)aName andEmail:(NSString *)aEmail { self.name = aName; self.eMail = aEmail; } -(void)print { NSLog(@"==================================="); NSLog(@"| |"); NSLog(@"| %-31s |",[_name UTF8String]); NSLog(@"| %-31s |",[_eMail UTF8String]); NSLog(@"| |"); NSLog(@"| |"); NSLog(@"| |"); NSLog(@"| 0 0 |"); NSLog(@"==================================="); } -(NSComparisonResult)compareName:(id)element { return [_name compare:[element name]]; } //重写 -(BOOL)isEqual:(AddressCard *)theCard { if ([_name isEqualToString:theCard.name] == YES )//&& [_eMail isEqualToString:theCard.eMail] == YES { return YES; } else { return NO; } } @end
AddressBook.h
#import <Foundation/Foundation.h> #import "AddressCard.h" @interface AddressBook : NSObject { NSString *_bookName; NSMutableArray *_book; } @property(nonatomic,copy)NSString *bookName; @property(nonatomic,strong)NSMutableArray *book;//强引用,数组中持有对象 -(id)initWithName:(NSString *)aBookName; -(void)addCard:(AddressCard *)theCard; -(int)entries;//统计 -(void)list;//显示 @end
AddressBook.m
#import "AddressBook.h" @implementation AddressBook @synthesize bookName = _bookName,book = _book; -(id)initWithName:(NSString *)aBookName { self = [super init]; if (self) { _bookName = [NSString stringWithString:aBookName]; _book = [NSMutableArray array];//空数组 } return self; } -(id)init { return [self initWithName:@"noName"]; } -(void)addCard:(AddressCard *)theCard { [_book addObject:theCard]; } -(int)entries { return [_book count]; } -(void)list { NSLog(@"===== Contents of:%@ =====",_bookName); for (AddressCard *theCard in _book) { NSLog(@"%-20s %-32s",[theCard.name UTF8String] ,[theCard.eMail UTF8String]); } NSLog(@"=============================================="); } @end
AddressBook+Option.h
#import "AddressBook.h" @interface AddressBook (Option) -(AddressCard *)lookup:(NSString *)theName; -(void)removeCard:(AddressCard *)theCard; -(void)sort; @end
AddressBook+Option.m
#import "AddressBook+Option.h" @implementation AddressBook (Option) -(AddressCard *)lookup:(NSString *)theName { for (AddressCard *nextCard in _book) { if ([nextCard.name caseInsensitiveCompare:theName] == NSOrderedSame)//不分大小写比较,返回值为-1,0,1 { return nextCard; } } return nil; } -(void)removeCard:(AddressCard *)theCard { [_book removeObject:theCard]; //[_book removeObjectIdenticalTo:theCard];//以对象地址判断两对象是否相等 } #if 0 -(void)sort { [_book sortUsingSelector:@selector(compareName:)]; } #else -(void)sort//效率同上一样,好处省去了到AddressCard类写compareName:比较方法 { [_book sortUsingComparator:^(id obj1,id obj2) { return [[obj1 name]compare:[obj2 name]]; }]; } #endif @end
AppDelegate.m
NSString *aName = @"jobs"; NSString *aEmail = @"jobs@163.com"; NSString *bName = @"wozz"; NSString *bEmail = @"wozz@sina.com"; NSString *cName = @"bill"; NSString *cEmail = @"bill@qq.com"; AddressCard *card1 = [[AddressCard alloc]init]; AddressCard *card2 = [[AddressCard alloc]init]; AddressCard *card3 = [[AddressCard alloc]init]; [card1 setName:aName andEmail:aEmail]; [card2 setName:bName andEmail:bEmail]; [card3 setName:cName andEmail:cEmail]; // [card1 print]; // [card2 print]; AddressBook *myBook = [[AddressBook alloc]initWithName:@"YiDaZhang address book"]; NSLog(@"at first book count:%i",[myBook entries]); [myBook addCard:card1]; [myBook addCard:card2]; [myBook addCard:card3]; NSLog(@"entries in address book after creation:%i",[myBook entries]); [myBook list]; //通过name查找 AddressCard *myCard = [myBook lookup:@"JOBS"]; if (myCard != nil) { [myCard print]; } else { NSLog(@"not found"); } //删除,注意AddressCard中重写了NSObject的isEqual方法的条件,removeObject:和containsObject和indexOfObject都依赖isEqual来决定两对象是否相等 AddressCard *myCard2 = [[AddressCard alloc]init]; myCard2.name = @"jobs"; myCard2.eMail = @"jobs@sohu.com"; [myBook addCard:myCard2]; [myBook list]; if ([myBook respondsToSelector:@selector(removeCard:)])//证明当前对象能响应类目添加的方法 { [myBook removeCard:myCard2]; } [myBook list]; //按name排序 [myBook sort]; [myBook list];
相关文章推荐
- java简单的获取windows系统网卡mac地址
- 编程查询溢出地址的简单方法
- PHP中用header:图片地址 简单隐藏图片源地址
- 简单地址重写
- wince下获取mac地址的简单方法!
- C#/.NET获取本机的外网IP地址的简单方法
- ASP.NET实现下载地址隐藏和简单防盗链
- 利用JS简单的验证邮箱地址
- GIS 门牌号地址匹配的简单实现
- 简单地址重写
- java简单的获取windows系统网卡mac地址
- Asp.net下实现隐藏真实下载地址(可以实现简单的防盗链)
- Asp.net下实现隐藏真实下载地址(可以实现简单的防盗链)
- 简单正则表达式验证Email地址是否正确
- 简单地址重写
- 简单地址重写
- java简单的获取windows系统网卡mac地址
- 最简单的邮箱地址的链接
- 函数的简单应用(原帖地址:http://topic.csdn.net/u/20090317/16/c7f5c2e3-293d-4d67-85be-0a4a17d52855.html)
- 一段JS简单获取页面来源地址