习题_多类实战
1. oc版电子词典
2. selector
回顾c语言中:
int add(int a, int b) {
return a+b;
}
int sub(int a, int b) {
return a-b;
}
//把 运算法则传入 (函数地址传入)
int calculation(int a, int b ,int (*p)(int,int)) {
return p(a,b);
}
respondsToSelector:
performSelector:
- (id)performSelector:(SEL)aSelector withObject:(id)object;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
…
#pragma clang diagnostic pop
3. 班级类&学生类 [先说明selector]
- (void)sortUsingSelector:(SEL)comparator;
/*
1.- sortUsingSelector:排序函数 内部排序算法已经实现了
2.这个 sortUsingSelector: 缺少一个比较的准则/比较函数(是谁在比较 是升序还是降序)
3.我们需要 自己写一个比较函数 (决定是谁在比较 升序/降序)
比较准则 左边 > 右边 交换(return yes) --> 升序
左边 < 右边 交换(return yes) --> 降序
4.比较函数写在哪里??? 数组元素 是哪个类的对象地址 那么就写在哪个类
5. @selector(isNumberOlderThanAnother:)把这个准则 转换为一个选择器,把比较函数中的代码 传给 - sortUsingSelector:函数内部
*/
按学号升序排序:
/*
if (self.num > another.num) {
return YES;
}else {
return NO;
}*/
//比较 准则 学生的学号在比较 左边 > 右边 返回yes 进行交换 升序
return self.num > another.num;
按照分数降序排序:
return self.score < another.score;
// 按照名字降序
return [self.name compare:another.name] > 0;
4. 通迅录类
Card {
NSString *_name;
NSString *_phoneNum;
}
PhoneBook {
NSString *_name;
NSMutableArray *_cards;
}
- (id)init;
- (void)addCard:(Card *)card;
- (void)removeCard:(Card *)card;//传名片的地址
- (void)showPhoneBook;
- (void)sortedBycontactName;
- (void)sortedByPhoneNumber;
5. 书签管理器
6. 歌词解析
相互包含问题
+(NSString)翻译 {
NSString *name = [User userInput];
NSString *trans = [self chineseForWord:name];
printf("%s\n", [trans UTF8String]);
}
//读字典文件解析
- (id)initWithFile:(NSString *)file {
if (self = [super init]) {
_dict = [[NSMutableDictionary alloc] init];
[self parse:file];
}
return self;
}
// 解析文件
- (void)parse:(NSString *)filePath {
if (!filePath || filePath.length == 0) return;
// 读取文件
NSString *content = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
if (!content) return;
/**
#abandon
Trans:vt. 放弃;沉溺@n. 放任
*/
// 把一条一条的记录放入数组中
NSArray *array = [content componentsSeparatedByString:@"\n"];
for (NSInteger i = 0; i < [array count]; i+=2) {
NSString *word = array[i];
if ([word length] <= 0) continue; // @""
word = [word substringFromIndex:1]; // 去除#
NSString *meaning = array[i+1]; // 释义,比如Trans:n. 算盘
meaning = [meaning substringFromIndex:6]; // 去除Trans:
// vt. 放弃;沉溺@n. 放任
NSArray *arr = [meaning componentsSeparatedByString:@"@"];
// [@"vt. 放弃;沉溺", @"n. 放任"]
// vt. 放弃;沉溺
// n. 放任
// 释义:
meaning = [arr componentsJoinedByString:@"\n"]; // --> 变成了
// vt. 放弃;沉溺\nn. 放任
// NSArray *a = @[@"one", @"two", @"three"];
// NSString *str = [a componentsJoinedByString:@"xxx"];
// str: onexxxtwoxxxthree
[_dict setObject:meaning forKey:word];
}
}
// 根据单词找到翻译
- (NSString *)chineseForWord:(NSString *)word {
return [_dict objectForKey:word];
}