我收到了一个错误
变量不可赋值(缺少__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;
7 回答
您需要使用以下代码行来解决您的问题:
有关更多详细信息,请参阅本教程:Blocks and Variables
只是提醒我自己也犯了一个错误
声明必须在首次声明变量时完成,即块的OUTSIDE,而不是它的内部 . 这应该解决关于变量的评论中提到的问题,这些变量不会在块之外保留其值 .
只需使用
__block
前缀来声明并在块内分配任何类型的变量 .例如:
要在块外部分配一个变量,在该变量之前总是使用__block说明符,你的代码应该是这样的: -
yes block是最常用的功能,所以为了避免保留周期,我们应该避免使用强变量,包括块内的self,尽管使用_weak或weakself .
如果您收到有关保留周期的任何警告,请尝试
__weak
使用__block
现在您可以在块内引用 weakPerson 对象 .