多用块枚举,少用for循环

基于块的遍历方式:

[ary enumerateObjectsUsingBlock:^(NSNumber *obj, NSUInteger idx, BOOL * _Nonnull stop)
{
    int i = [obj intValue];
    if (i == 30)
    {
        *stop = YES;
    }
    NSLog(@"输出:%d", i);
}];
NSDictionary *dict = @{@"a" : @(1), @"b" : @(2)};
[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id  _Nonnull obj, BOOL * _Nonnull stop)
{
    if ([key isEqualToString:@"b"])
    {
        *stop = YES;
    }
    NSLog(@"输出:%@", obj);
}];

此方式相对其他方式有很大的优势。因为可以获取很多的信息。

并且块中的参数可以根据需要改变类型。

还可以执行反向遍历和并行遍历:

[ary enumerateObjectsWithOptions:(NSEnumerationReverse)
                      usingBlock:^(NSNumber *obj, NSUInteger idx, BOOL * _Nonnull stop)
{
    NSLog(@"输出:%@", obj);
}];

NSEnumerationReverse是反向遍历;

NSEnumerationConcurrent是并行执行。而且他们还可以用“按位或”连接。

猜你喜欢

转载自blog.csdn.net/run_in_road/article/details/113126007