oc菜鸟之 NSArray遍历的一些方法

228 阅读1分钟
#import <Foundation/Foundation.h>
#import "KFuser.h"

@implementation FKUser

-(id) initWithName:(NSString*) name pass:(NSString*) pass {
    if(self = [super init]){
        //        self->_name = name;
        //        self->_pass = pass;
        self.name = name;
        self.pass = pass;
    }
    return self;
}

-(void) say:(NSString*) preStr :(NSString*) endStr {
    NSLog(@"%@%@说:%@%@",preStr,self.name,self.pass,endStr);
}

-(void) testFun:(NSString*) argv{
    NSLog(@"%@%@说:%@%@",argv,self.name,self.pass,argv);
}

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSArray* array = @[
            [[FKUser alloc] initWithName: @"gy" pass:@"123456"],
            [[FKUser alloc] initWithName: @"gy1" pass:@"123456"],
            [[FKUser alloc] initWithName: @"gy2" pass:@"123456"],
        ];
        //遍历数组中所有的元素指定的方法,方法有参数使用带有withObject 的方法
        [array makeObjectsPerformSelector:@selector(testFun:) withObject:@"测试"];
      
        //遍历数组中所有的元素执行指定的代码块 obj 正在遍历的元素 idx 遍历元素的下标 stop 暂时不知道 据说是可以停止遍历
        [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"正在处理第%1d个元素:%@",idx,obj);
        }];
        
        //遍历数组中所有的元素执行指定的代码块 obj 正在遍历的元素 idx 遍历元素的下标 stop 暂时不知道 据说是可以停止遍历
        // 增加 indexSetWithIndexesInRange 指定遍历的开始下标跟遍历的长度
        // options 指定是正向遍历还是反向遍历 NSEnumerationConcurrent NSEnumerationReverse
        [array enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 2)]
                                 options: NSEnumerationReverse
                              usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"正在处理第%1d个元素:%@",idx,obj);
            [obj say:@"测试参数1" :@"测试参数2"];
        }];
    }
    return 0;
}