@implementation EnumNestArray
- (void) enumNestArray:(NSArray*)nestArray block:(void (^)(id n
um))block {
for (id element in nestArray) {
if ([element isKindOfClass:[NSArray class]]) {
[self enumNestArray:element block:block];
} else {
block(element);
}
}
}
@end
Enumerator Version
#import <Foundation/Foundation.h>
@interface NSNestedNumberEnumerator : NSObject
- (BOOL)hasNext;
- (id)nextObj;
- (instancetype)initWithNestArray:(NSArray*)nestArray;
- (void)allObj;
@end
@interface NSNestedNumberEnumerator()
@property (nonatomic, strong) NSMutableArray* stack;
@end
@implementation NSNestedNumberEnumerator: NSObject
- (instancetype)initWithNestArray:(NSArray *)nestArray {
self = [super init];
if (self) {
self.stack = [NSMutableArray array];
for (NSInteger i = nestArray.count-1; i >= 0; i--) {
[self.stack addObject:nestArray[i]];
}
}
return self;
}
- (BOOL)hasNext {
while (self.stack.count != 0) {
id lastObj = self.stack.lastObject;
if (lastObj && ![lastObj isKindOfClass:[NSArray class]])
{
return YES;
} else {
NSArray* lastArray = self.stack.lastObject;
[self.stack removeLastObject];
for (NSInteger i = lastArray.count-1; i >= 0; i--) {
[self.stack addObject:lastArray[i]];
}
}
}
return NO;
}
- (id)nextObj {
id res = self.stack.lastObject;
[self.stack removeLastObject];
return res;
}
- (void)allObj {
while ([self hasNext]) {
NSLog(@"%@",[self nextObj]);
}
}
@end
Key: isKindOfClass