迭代器
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 的逆序数组
网友评论