я написал и использовал немного обработчик завершения только на практике прибивали вниз блоки -Понимание обработчиков пользовательских завершающие
-(void)delayAndSetCompletionBlock:(void (^)(BOOL))completed {
//set a delay timer
double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
//code to be executed on the main queue after delay
completed(YES);
});
}
В ВК в другом месте, я проверить переменную завершения; если блок завершен, я меняю цвет фона на что-то еще.
Мой вопрос в том, что в методе delayAndSetCompletionBlock
у нас есть аргумент, который является блоком. Блок имеет возвращаемый тип void, принимает параметр Bool
в качестве параметра, а аргумент BLOCK называется завершенным. Как это относится к дальнейшему снижению кода, в котором я указываю completed(YES)
?
Я просто смущен относительно того, что completed(YES)
связано с блоком, который я передал в качестве аргумента метода. completed
- это имя типа блока, передаваемого методу, поэтому я говорю «выполнить блок, который мы дали методу, и передать YES
в качестве логического параметра, который требуется»? Если да, то как блок знает, что делать с этим YES
?
Я предполагаю, что комментарий «// code to be ....» является заполнителем для кода, который будет выполнен после короткой задержки. Последнее, что delayAndSetCompletionBlock: будет делать, это вызвать блок, который он дал в качестве аргумента. Если вы можете представить какое-либо обстоятельство в коде места-заполнителя, где что-то пойдет не так, вы можете называть его завершенным (НЕТ). Блок, вызванный завершением, может использовать параметр BOOL, чтобы увидеть, действительно ли код действительно завершился. –