入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

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

创建时间:2016-06-22 投稿人: 浏览次数:3207

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(@"%@
",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===%@
",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=%@
",key,obj);
    }];
    
    /**
     NSEnumerationConcurrent 当前的排序状态
     NSEnumerationReverse    倒序排列
     */
    [tmpdic enumerateKeysAndObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        NSLog(@"tmpdis2:key=%@ value=%@
",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

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

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




阅读更多
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。