OC学习 第五节

                                                               习题_多类实战


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];
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值