programing

블록 내부의 변수를 블록 외부의 변수에 할당

closeapi 2023. 4. 26. 23:22
반응형

블록 내부의 변수를 블록 외부의 변수에 할당

오류가 발생합니다.

변수를 할당할 수 없습니다( __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;

문제를 해결하려면 다음 코드 라인을 사용해야 합니다.

__block Person *aPerson = nil;

자세한 내용은 이 튜토리얼을 참조하십시오.블럭 및 변수

내가 저지른 실수를 상기시켜주는 것 뿐이야,

 __block

변수를 처음 선언할 때, 즉 블록 내부가 아닌 블록 외부에 선언해야 합니다.이렇게 하면 블록 외부에서 변수 값이 유지되지 않는 것에 대한 설명에 언급된 문제가 해결됩니다.

사용하기만 하면 됩니다.__block블록 내부의 변수 유형을 선언하고 할당할 접두사입니다.

예:

__block Person *aPerson = nil;

__block NSString *name = nil;

블록 외부에서 항상 __block 지정자를 사용하는 블록 내부의 변수를 할당하려면 코드는 다음과 같아야 합니다.

__block Person *aPerson = nil;
__block Person *aPerson = nil;

해라__weak보존 주기와 관련하여 경고를 받으면 그렇지 않은 경우 사용합니다.__block

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

이제 블록 내부의 객체를 참조할 수 있습니다.

yes 블록은 가장 많이 사용되는 기능이므로 유지 주기를 피하기 위해 _weak 또는 weak self를 사용하더라도 블록 내부의 self를 포함한 강력한 변수를 사용하지 않아야 합니다.

동일한 오류가 발생했을 때 다음과 같이 해결하려고 했습니다.

   __block CGFloat docHeight = 0.0;


    [self evaluateJavaScript:@"document.height" completionHandler:^(id height, NSError *error) {
        //height
        NSLog(@"=========>document.height:@%@",height);
        docHeight = [height floatValue];
    }];

그리고 그것은 잘 작동합니다.

변수 앞에 "__block"을 추가하기만 하면 됩니다.

언급URL : https://stackoverflow.com/questions/7962721/assign-a-variable-inside-a-block-to-a-variable-outside-a-block

반응형