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

我遇到错误 spa

变量不可分配(缺乏__block类型说明符) code

在线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说明符: ip

__block Person *aPerson = nil;

#2楼

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

例如: 变量

__block Person *aPerson = nil;

__block NSString *name = nil;

#3楼

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

__block

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


#4楼

__block Person *aPerson = nil;

#5楼

若是收到有关保留周期的任何警告,请尝试__weak ,不然请使用__block 注释

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

如今,您能够在块内引用weakPerson对象。 ant

相关文章
相关标签/搜索