迭代器-半成品

2018-06-13  本文已影响19人  iOS_愛OS

迭代器


iOS 中常用的迭代器

//NSEnumerator 枚举
- (void)enumeratorDemo{
    NSArray *nameArr = @[@"孔子",@"孟子",@"墨子",@"老子",@"鬼谷子"];
    NSEnumerator *enumerator = [nameArr objectEnumerator];
    NSString *item;
    while (item = [enumerator nextObject]) {
        // 对 item 做处理
    }
}
// 块枚举
- (void)enumeratorWithBloc{
    void (^demoBlock)(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) = ^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop){
        NSLog(@"%@",obj);
        NSLog(@"idx = %lu",(unsigned long)idx);
        if ([(NSString *)obj  isEqual: @"墨子"]){
            *stop = YES;
        }
    };
    NSArray *nameArr = @[@"孔子",@"孟子",@"墨子",@"老子",@"鬼谷子"];
    [nameArr enumerateObjectsUsingBlock:demoBlock];
}

//快速枚举
- (void)quickEnumerator{
    NSArray *nameArr = @[@"孔子",@"孟子",@"墨子",@"老子",@"鬼谷子"];
    for (NSString *item in nameArr) {
        //做处理
    }
}

// 内部枚举
- (void)insideEnumerator{
    NSArray *nameArr = @[@"孔子",@"孟子",@"墨子",@"老子",@"鬼谷子"];
    // nameArr 中的每个元素都执行 method 方法
    //[nameArr makeObjectsPerformSelector:method]
    // nameArr 中的每个元素都执行 method 方法,方法参数为 obj
//    [nameArr makeObjectsPerformSelector:method withObject:obj]
}

MarkEnumerator.h
MarkEnumerator+Internal.h
MarkEnumerator.m

.m 中实现 MarkEnumerator.h 和 MarkEnumerator 中声明的所有方法。

[[array reverseObjectEnumerator] allObjects];
其中 [array reverseObjectEnumerator] 得到一个逆序的枚举型
[[array reverseObjectEnumerator] allObjects]; 是得到数组 array 的逆序数组

上一篇 下一篇

猜你喜欢

热点阅读