[OC] 使用 block 实现函数嵌套

栏目: IOS · 发布时间: 6年前

内容简介:在 Swift 中,在函数内部定义一个函数即函数嵌套,举例如下:在 OC 中没有这类特性,不过如果联想到 Swift 中函数实际是一种有名字的闭包,那么函数嵌套的思想就可以延伸到 OC 语言中了。由此可见,将嵌套的函数逻辑封装到一个 block,这样就可以在需要时直接调用 block,而不需要另外声明一个方法了。

在 Swift 中,在函数内部定义一个函数即函数嵌套,举例如下:

func foo() {
     var a = 1
      func bar() {
             a += 1
      }

     bar()
}
复制代码

在 OC 中没有这类特性,不过如果联想到 Swift 中函数实际是一种有名字的闭包,那么函数嵌套的思想就可以延伸到 OC 语言中了。

OC 函数嵌套的实现

- (void)foo {
     __block NSInteger a = 1;
     void(^bar)(void) = ^{
             a += 1;
      };
      bar();
}
复制代码

由此可见,将嵌套的函数逻辑封装到一个 block,这样就可以在需要时直接调用 block,而不需要另外声明一个方法了。

应用场景的延伸

凡用到嵌套函数的场景,往往也是这一段需要在一个函数/方法的内部多次使用逻辑,不需要外界知晓,比如:

  • 地址格式化逻辑
  • 日期格式化
  • 数据解析操作

这些 block 变量就像一个个小函数一样随时调用,举个应用的例子:

NSString *(^formatDate)(NSDate *) = ^NSString *(NSDate *date) {
        NSString *str = [date formatYMD];
        return str ?: @"";
    };
    
    NSString *(^formatStamp)(NSString *) = ^NSString *(NSString *stamp){
        NSDate *date = [NSDate dateWithTimeIntervalSince1970:stamp.doubleValue];
        return formatDate(date);
    };
    
    userInfo = @{
                 kCellLeftTitle : @"起运时间",
                 kCellRightContent : formatStamp(self.model.from_begin_time),
                 kCellModelKey : [NSDate dateWithTimeIntervalSince1970:self.model.from_begin_time.doubleValue],
                 kTextFieldDisableKey : @YES,
                 kHasIndicatorKey : @YES,
                 };
    row.didSelectCellBlock = ^(NSIndexPath *indexPath, id value, id cell) {
        WSDatePickerView *picker = [[WSDatePickerView alloc] initWithDateStyle:DateStyleShowYearMonthDay
                                                                 CompleteBlock:^(NSDate *selected) {
            value[kCellModelKey] = selected;
            value[kCellRightContent] = formatDate(selected);
            [weakSelf.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
        }];
        picker.selectedDate = value[kCellModelKey];
        [picker show];
    };
复制代码

上述代码中是在一个方法体的内部,声明了两个 block 变量做嵌套函数使用,分别是 formatDate 和 formatStamp,用于处理模型数据中的 日期和时间戳的字符串表示逻辑。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

经济学原理(第7版):微观经济学分册+宏观经济学分册(套装共2册)

经济学原理(第7版):微观经济学分册+宏观经济学分册(套装共2册)

曼昆 (N.Gregory Mankiw) / 梁小民、梁砾 / 北京大学出版社 / 2015-5-1 / 128

《经济学原理(第7版):微观经济学分册+宏观经济学分册》是目前国内市场上最受欢迎的引进版经济学教材之一,其最大特点是它的“学生导向”,它更多地强调经济学原理的应用和政策分析,而非经济学模型。第7版在延续该书一贯风格的同时,对第6版作了全面修订和改进。大幅更新了“新闻摘录”“案例研究”等专栏,拓展了章后习题。一起来看看 《经济学原理(第7版):微观经济学分册+宏观经济学分册(套装共2册)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具