新型的遍历,用block + stop + obj


/**

 *  新型 for 循环遍历

 */


typedef void (^MJClassesBlock)(Class c,BOOL *stop);


- (void)enumerateClassesWithBlock:(MJClassesBlock)block

{

    // 1.没有block就直接返回

    if (block == nil)return;

    

    // 2.停止遍历的标记

    BOOL stop = NO;

    

    // 3.当前正在遍历的类

    Class c = [self class];

    

    // 4.开始遍历每一个类

    while (c && !stop) {

        // 4.1.执行操作

        block(c, &stop);

        

        // 4.2.获得父类

        c = class_getSuperclass(c);

    }

}


// 数组遍历

typedef void (^MJClassesBlock)(id obj, NSInteger index, BOOL *stop);


@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    NSArray * arr =@[ @"01",@"12", @"23",@"34", @"45",@"56", @"67",@"78", @"89",@"90"];

    [self enumerateClassesWithBlock:^(NSString *  obj,NSInteger index, BOOL *stop) {

        NSLog(@"%@===%ld==%d", obj, (long)index, *stop);

        if (index == 6) {

            *stop = YES;

        }

    } withArr:arr];

   

}



-(void)enumerateClassesWithBlock:(MJClassesBlock)block withArr:(NSArray *)arr{

    if (block == nil)return;

    BOOL stop = NO;

    

    for (NSInteger i =0; i < arr.count; i++) {

        id obj = arr[i];

        block(obj, i, &stop);

        if (stop == YESbreak;

    }

}


// 打印结果

2016-03-29 11:14:33.206 magic[987:63592] 01===0==0

2016-03-29 11:14:33.206 magic[987:63592] 12===1==0

2016-03-29 11:14:33.207 magic[987:63592] 23===2==0

2016-03-29 11:14:33.207 magic[987:63592] 34===3==0

2016-03-29 11:14:33.207 magic[987:63592] 45===4==0

2016-03-29 11:14:33.208 magic[987:63592] 56===5==0

2016-03-29 11:14:33.208 magic[987:63592] 67===6==0



#pragma mark 利用迭代器
void arrayFor4(){
    NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];
    NSEnumerator *enumerator = [array objectEnumerator];
    //如果放到遍历之后,则取到空,原因是,遍历完了,就没值了
    NSArray *array2 = [enumerator allObjects];
    NSLog(@"array2:%@", array2);
   
    //获取下一个需要遍历的元素
    id obj = nil;
    while (obj = [enumerator nextObject]) {
        NSLog(@"obj=%@", obj);
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值