블록 내부의 변수를 블록 외부의 변수에 할당
오류가 발생합니다.
변수를 할당할 수 없습니다( __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
'programing' 카테고리의 다른 글
objectForKey와 valueForKey의 차이점은 무엇입니까? (0) | 2023.04.26 |
---|---|
쉼표로 구분된 문자열을 목록으로 변환하는 방법 (0) | 2023.04.26 |
UITableView 셀 내부의 URL에서 비동기 이미지 로드 - 스크롤하는 동안 이미지가 잘못된 이미지로 변경됨 (0) | 2023.04.26 |
데이터베이스에서 숫자의 정밀도와 척도를 어떻게 해석합니까? (0) | 2023.04.26 |
Git를 위한 최고의 시각적 병합 도구는 무엇입니까? (0) | 2023.04.26 |