将块内的变量分配给块外的变量

浪尽此生 提交于 2020-02-27 08:14:47

我遇到错误

变量不可分配(缺少__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;

#1楼

要在块内分配一个在块外的变量,请始终在该变量之前使用__block说明符:

__block Person *aPerson = nil;

#2楼

只需使用__block前缀在块内声明和分配任何类型的变量即可。

例如:

__block Person *aPerson = nil;

__block NSString *name = nil;

#3楼

只是提醒我我也犯了一个错误,

 __block

在首先声明变量时,即在块的外部,而不是在内部,必须进行声明。 这样可以解决注释中提到的关于变量不在块外保留其值的问题。


#4楼

__block Person *aPerson = nil;

#5楼

如果收到有关保留周期的任何警告,请尝试__weak ,否则请使用__block

Person *strongPerson = [Person new];
__weak Person *weakPerson = person;

现在,您可以在块内引用weakPerson对象。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!