將塊內的變量分配給塊外的變量

我遇到錯誤 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

相關文章
相關標籤/搜索