NSMutableArray是可变数组,以下的例子是一个通讯录,可增加、删除、搜索联系人。 AddressCard.h:
#import
@interface AddressCard : NSObject
{
NSString * nickname;
//存放昵称
NSString * email;
//电邮
}
@property (copy,nonatomic) NSString * nickname,* email;
//属性,必须加copy nonatomic参数
-(void)setNickName:(NSString *)n andEmail:(NSString *) e;
//设置昵称和邮件的接收器
-(NSComparisonResult) compareNames:(AddressCard *) card;
//排序用,返回nickname对比的结果
@end
AddressCard.m:
#import "AddressCard.h"
@implementation AddressCard
-(void)setNickName:(NSString *)n andEmail:(NSString *)e
{
self.nickname=[NSString stringWithString:n];
self.email=[NSString stringWithString:e];
}
- (NSString *)description
{
return [nickname stringByAppendingFormat:@" Email: %@",email];
}
-(BOOL) isEqual:(AddressCard *)object
{
if([nickname isEqualToString:[object nickname]]&&[email isEqualToString:[object email]])
{
return YES;
}
return NO;
}
-(NSComparisonResult) compareNames:(AddressCard *)card
{
return [nickname compare:[card nickname]];
}
@synthesize nickname,email;
@end
AddressBook.h:
#import
#import "AddressCard.h"
@interface AddressBook : NSObject
{
NSString *bookName;
NSMutableArray *book;
}
-(id)initWithName:(NSString *) name;
-(void)addCard:(AddressCard *) card;
//添加联系人
-(int)entries;
//返回联系人数量
-(void)list;
//列出所有联系人
-(void)deleteCard:(AddressCard *)card;
//删除联系人
-(void)sort;
//排序
-(AddressCard *) lookup:(NSString *) theName;
//搜索联系人
@end
AddressBook.m:
#import "AddressBook.h"
@implementation AddressBook
-(id)initWithName:(NSString *)name
{
self=[super init];
name=[NSString stringWithString:name];
book=[NSMutableArray new];
return self;
}
-(void)addCard:(AddressCard *)card
{
[book addObject:card];
}
-(int)entries
{
return [book count];
}
-(void)list
{
for(AddressCard *card in book)
{
NSLog(@"%@",card);
}
}
-(AddressCard *) lookup:(NSString *)theName
{
for(AddressCard * nextCard in book)
{
if([theName caseInsensitiveCompare:[nextCard nickname]]==NSOrderedSame)
{
//忽略大小写,查找联系人
return nextCard;
}
}
return nil;
}
-(void)deleteCard:(AddressCard *)card
{
[book removeObject:card];
}
-(void)sort
{
[book sortUsingSelector:@selector(compareNames:)];
//使用选择器排序,使用AddressCard中的compareNames方法作选择器
}
@end
main.m:
#import
#import "AddressBook.h"
//AddressBook.h中已经有导入AddressCard.h,所以这里无需再导
int main (int argc, const char * argv[])
{
@autoreleasepool {
AddressCard *card1=[AddressCard new];
[card1 setNickName:@"bcd" andEmail:@"adf@adf.com"];
AddressBook *book=[AddressBook alloc];
book=[book initWithName:@"MyAddressBook"];
[book addCard:card1];
AddressCard *card2=[AddressCard new];
[card2 setNickName:@"afd" andEmail:@"asdf@dadfsff.com"];
[book addCard:card2];
[book list];
//列出排序前所有的AddressCard
[book sort];
//排序
[book list];
//列出排序后所有的AddressCard
AddressCard *findCard=[book lookup:@"bcd"];
NSLog(@"%@",[findCard email]);
//搜索
[book deleteCard:findCard];
//删除
[book list];
}
return 0;
}