Я получаю ошибку
Переменная не присваивается (отсутствует спецификатор типа __block)
на линии aPerson = participant;
. Как я могу убедиться, что блок может получить доступ к aPerson
переменной и aPerson
переменная может быть возвращена?
Person *aPerson = nil;
[participants enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Person *participant = (Person*)obj;
if ([participant.gender isEqualToString:@"M"]) {
aPerson = participant;
*stop = YES;
}
}];
return aPerson;
__block
с префиксом с двумя подчеркиваниями.__block
мою ошибку, но значение не сохраняется вне блока. Любая помощь здесьПросто напоминание об ошибке, которую я сделал сам,
объявление должно быть сделано при первом объявлении переменной, то есть ВНЕ блока, а не внутри него. Это должно решить проблемы, упомянутые в комментариях о том, что переменная не сохраняет свое значение за пределами блока.
источник
Просто используйте
__block
префикс для объявления и назначения любого типа переменной внутри блока.Например:
источник
Чтобы назначить переменную внутри блока, которая вне блока всегда использует спецификатор __block перед этой переменной, ваш код должен выглядеть следующим образом: -
источник
источник
Попробуйте,
__weak
если вы получите предупреждение о сохранении цикла, иначе используйте__block
Теперь вы можете ссылаться на
weakPerson
объект внутри блока.источник
Блок да - наиболее часто используемая функциональность, поэтому, чтобы избежать цикла сохранения, мы должны избегать использования сильной переменной, включая self внутри блока, несмотря на использование _weak или weakself.
источник
Когда я увидел ту же ошибку, я попытался устранить ее следующим образом:
и работает нормально
Просто добавьте « __block » перед переменной.
источник