【iOS开发】如何使用enumerate开头的方法

1、关于NSString的方法

官方提供的方法:

/* In the enumerate methods, the blocks will be invoked inside an autorelease pool, so any values assigned inside the block should be retained.
*/
- (void)enumerateSubstringsInRange:(NSRange)range options:(NSStringEnumerationOptions)opts usingBlock:(void (^)(NSString * __nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);
- (void)enumerateLinesUsingBlock:(void (^)(NSString *line, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);
我们可以用来一行一行的读取一个txt文档的内容,并使用的 大笑

//    字符串
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"girl" ofType:@"txt"];
    NSData *fileData = [NSData dataWithContentsOfFile:filePath];
    NSString *fileStr = [[NSString alloc]initWithData:fileData encoding:NSUTF8StringEncoding];
    
    //一行一行的读取
    [fileStr enumerateLinesUsingBlock:^(NSString * _Nonnull line, BOOL * _Nonnull stop) {
        NSLog(@"%@\n",line);
    }];
    
//    一个字符一字符的读取
    [fileStr enumerateSubstringsInRange:NSMakeRange(0, fileStr.length) options:NSStringEnumerationByWords usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
        NSLog(@"tmp111===%@",substring);
    }];

打印结果如下:
2016-06-22 11:51:58.981 test12390-[7270:91135] 1、小女孩
2016-06-22 11:51:58.982 test12390-[7270:91135] く__,.ヘヽ.    / ,ー、 〉
2016-06-22 11:51:58.982 test12390-[7270:91135]      \ ', !-─‐-i / /´
2016-06-22 11:51:58.982 test12390-[7270:91135]       /`ー'    L//`ヽ、
2016-06-22 11:51:58.982 test12390-[7270:91135]      /  /,  /|  ,  ,    ',
2016-06-22 11:51:58.983 test12390-[7270:91135]    イ  / /-‐/ i L_ ハ ヽ!  i
2016-06-22 11:51:58.983 test12390-[7270:91135]     レ ヘ 7イ`ト  レ'ァ-ト、!ハ|  |
2016-06-22 11:51:58.983 test12390-[7270:91135]      !,/7 'ゞ'   ´i__rハiソ|   |
2016-06-22 11:51:58.983 test12390-[7270:91135]      |.从"  _   ,,,, / |./   |
2016-06-22 11:51:58.984 test12390-[7270:91135]      レ'| i>.、,,__ _,.イ /  .i  |
2016-06-22 11:51:58.984 test12390-[7270:91135]       レ'| | / k_7_/レ'ヽ, ハ. |
2016-06-22 11:51:58.984 test12390-[7270:91135]        | |/i 〈|/  i ,.ヘ | i |
2016-06-22 11:51:58.984 test12390-[7270:91135]       .|/ / i:   ヘ!  \ |
2016-06-22 11:51:58.984 test12390-[7270:91135]         kヽ>、ハ   _,.ヘ、   /、!
2016-06-22 11:51:58.985 test12390-[7270:91135]        !'〈//`T´', \ `'7'ーr'
2016-06-22 11:51:58.985 test12390-[7270:91135]        レ'ヽL__|___i,___,ンレ|ノ
2016-06-22 11:51:58.985 test12390-[7270:91135]          ト-,/ |___./
2016-06-22 11:51:58.985 test12390-[7270:91135]          'ー'  !_,.:

和我txt文档的内容一模一样。

2、关于NSArray的方法的使用

官方提供的方法:

- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);
- (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts usingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);

可以使用这个方法枚举出来数组中的对象,并且好像使用了多核的优势比for循环要效率要高

  NSArray *tmpAry = @[@"1",@"2",@"3"];
    /**
     NSEnumerationConcurrent 当前的排序状态
     NSEnumerationReverse    倒序排列
     */
    [tmpAry enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        NSLog(@"tmpAry===%@\n",obj);
        
    }];

倒序枚举结果:

2016-06-22 11:51:59.072 test12390-[7270:91135] tmpAry===3
2016-06-22 11:51:59.072 test12390-[7270:91135] tmpAry===2
2016-06-22 11:51:59.072 test12390-[7270:91135] tmpAry===1

3、关于NSDictionary的方法的使用

官方方法:

- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(KeyType key, ObjectType obj, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);
- (void)enumerateKeysAndObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(KeyType key, ObjectType obj, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);

这个方法也是枚举遍历方法,可以枚举这个字典里面key和value值

//    字典
    NSDictionary *tmpdic = @{@"1":@"q",@"2":@"w"};
    [tmpdic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        NSLog(@"tmpdis:key=%@ value=%@\n",key,obj);
    }];
    
    /**
     NSEnumerationConcurrent 当前的排序状态
     NSEnumerationReverse    倒序排列
     */
    [tmpdic enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        NSLog(@"tmpdis2:key=%@ value=%@\n",key,obj);
    }];

枚举打印结果:

2016-06-22 12:12:51.643 test12390-[7539:104971] tmpdis:key=1 value=q
2016-06-22 12:12:51.643 test12390-[7539:104971] tmpdis:key=2 value=w
2016-06-22 12:12:51.643 test12390-[7539:104971] tmpdis2:key=1 value=q
2016-06-22 12:12:51.643 test12390-[7539:104971] tmpdis2:key=2 value=w

字典好像没什么区别,郁闷!!

这是我终结的一部分,算是抛砖引玉吧,大家可以研究一下!




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WMSmile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值