Форматировать строку Go без печати?

Аргумент stop для блока позволяет вам преждевременно остановить перечисление . Это эквивалент break из нормального цикла for. Вы можете игнорировать его, если хотите пройти через каждый объект в массиве.

for( id obj in arr ){
    if( [obj isContagious] ){
        break;    // Stop enumerating
    }

    if( ![obj isKindOfClass:[Perefrigia class]] ){
        continue;    // Skip this object
    }

    [obj immanetizeTheEschaton];
}

[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if( [obj isContagious] ){
        *stop = YES;    // Stop enumerating
        return;
    }

    if( ![obj isKindOfClass:[Perefrigia class]] ){
        return;    // Skip this object
    }

    [obj immanentizeTheEschaton];
}];

Это параметр out, потому что это ссылка на переменную из области вызова. Он должен быть установлен внутри вашего блока, но читается внутри enumerateObjectsUsingBlock:, так же NSError s обычно передаются обратно в ваш код из вызовов инфраструктуры.

- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block {
    // N.B: This is probably not how this method is actually implemented!
    // It is just to demonstrate how the out parameter operates!

    NSUInteger idx = 0;
    for( id obj in self ){

        BOOL stop = NO;

        block(obj, idx++, &stop);

        if( stop ){
            break;
        }
    }
}
324
задан Peter verleg 21 May 2019 в 13:58
поделиться