我得到一个错误

变量不可赋值(缺少__block类型说明符)

在线人=参与者;我如何确保块可以访问person变量和person变量可以返回?

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 Person *aPerson = nil;

要了解更多细节,请参考本教程:块和变量

其他回答

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

例如:

__block Person *aPerson = nil;

__block NSString *name = nil;
__block Person *aPerson = nil;

只是提醒我自己也犯了个错误

 __block

声明必须在第一次声明变量时完成,也就是说,在块的外部,而不是在块的内部。这将解决注释中提到的关于变量在块外不保留其值的问题。

你需要使用这行代码来解决你的问题:

__block Person *aPerson = nil;

要了解更多细节,请参考本教程:块和变量

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

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

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