@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

results matching ""

    No results matching ""