블록 선언 구문 목록
목적 C(그리고 실제로 C, 추측컨대)의 블록 구문은 부조화하기로 악명 높다.블록을 인수로 전달하는 것은 블록을 ivar로 선언하는 것과는 다르게 보입니다.typedef블록 입력
빠른 참조를 위해 보유할 수 있는 포괄적인 블록 선언 구문 목록이 있습니까?
블록 선언 구문 목록
쭉, 렛츠
return_type객체/물건 등의 유형입니다.반환하고 싶은 경우(복귀)void)blockName생성할 블록의 변수 이름입니다.var_type타입 오브젝트/오브젝트 등입니다.인수로 전달하려고 합니다(매개변수가 없는 경우 공백으로 둡니다).varName지정된 파라미터의 변수 이름입니다.
원하는 만큼의 파라미터를 작성할 수 있습니다.
블럭을 변수로 사용
선언의 가장 일반적인 경우일 수 있습니다.
return_type (^blockName)(var_type) = ^return_type (var_type varName)
{
// ...
};
속성으로서의 블록
블록을 변수로 선언하는 것과 비슷하지만 미묘하게 다릅니다.
@property (copy) return_type (^blockName) (var_type);
파라미터로서의 블록
이는 "Blocks as Arguments"와는 다릅니다.이 예에서는 block 인수를 필요로 하는 메서드를 선언합니다.
- (void)yourMethod:(return_type (^)(var_type))blockName;
인수로서의 블록
이는 "Blocks as Parameters"와는 다릅니다.이 예에서는 익명 블록을 사용하여 블록 인수를 필요로 하는 메서드를 호출합니다.블록 변수를 이미 선언한 경우 변수 이름을 인수로 전달하면 됩니다.
[someObject doSomethingWithBlock: ^return_type (var_type varName)
{
//...
}];
익명 차단
이것은 기능적으로는 익명 블록이지만 변수에 블록을 할당하는 구문은 단순히 변수를 익명 블록과 동일하게 설정하는 것입니다.
^return_type (var_type varName)
{
//...
};
typedef블록
이를 통해 블록 선언 중에 다른 클래스 이름과 마찬가지로 참조할 수 있는 짧은 이름을 설정할 수 있습니다.
typedef return_type (^blockName)(var_type);
나중에 사용하기 위해blockName표준 블록 선언 구문 대신 단순히 대체하십시오.
인라인 블록
이 방법은 블록의 활용도가 낮지만, 그래도 나름의 가치가 있을 수 있습니다.인라인 블록은 인스턴스화 직후 호출되는 익명 블록입니다.
^return_type (var_type varName)
{
//...
}(var);
인라인 블록은 주로 스코프 오프셋에 유용하며 단순한 중괄호로 구분된 코드 청크와 거의 동일합니다.
{
//...
}
재귀 블록
이를 통해 블록 자체를 호출하여 콜백 및 GCD 콜 중에 사용할 수 있는 루프를 생성할 수 있습니다.이 인스턴스화 방법에는 ARC의 유지 사이클이 없습니다.
__block return_type (^blockName)(var_type) = [^return_type (var_type varName)
{
if (returnCondition)
{
blockName = nil;
return;
}
// ...
} copy];
blockName(varValue);
반환 블록
메서드는 블록을 반환할 수 있습니다.
- (return_type(^)(var_type))methodName
{
// ...
}
조금 이상하긴 하지만 함수로도 사용할 수 있습니다.
return_type (^FunctionName())(var_type)
{
// ...
}
부록
제가 놓친 부분이 있으면 댓글로 알려주세요.조사/추가하겠습니다.
아, 그리고 스위프트에서는...
blockName = (varName: var_type) -> (return_type)
거의 언어 기능인 것 같아요.
저는 개인적으로 이 사이트(http://fuckingblocksyntax.com)를 이용하는 것을 좋아합니다.이 이름은 블록 구문 자체보다 기억하기 쉽습니다.
http://fuckingblocksyntax.com
또한 나쁜 단어가 포함된 URL을 로드할 수 없는 경우 다음 미러를 사용할 수 있습니다.http://goshdarnblocksyntax.com

유형:
typedef void (^block)(NSString *arg);
인라인:
void (^block)(NSString *) = ^(NSString *param) {
// do something....
};
방법:
- (void)method:(void (^)(NSString *param))handler
Xcode 4 스니펫라이브러리에는 block typedefs 및 인라인블록용 템플릿이 변수로 포함되어 있습니다. 완성 완성)을 통해서도 할 수 있습니다.typedefblock ★★★★★★★★★★★★★★★★★」inlineblock를 참조해 주세요.
메서드의 「」을 선언하는 것을 합니다.typedef츠키노코드를 읽기 훨씬 쉬워집니다.
클래스용 completeBlock을 작성했습니다.다이스 값을 셰이크하면 반환됩니다.
returnTypereturnType)을 합니다.
.h이상@interface□□□□□□□□★typedef void (^CompleteDiceRolling)(NSInteger diceValue);의 정의
@property.h)@property (copy, nonatomic) CompleteDiceRolling completeDiceRolling;서서 with with with with with with with with with with with with로 합니다.
finishBlock).h)- (void)getDiceValueAfterSpin:(void (^)(NSInteger diceValue))finishBlock;에 를 에 삽입합니다.
.mcommit " " " 。finishBlock로로 합니다.@property에 정의하다- (void)getDiceValueAfterSpin:(void (^)(NSInteger diceValue))finishBlock{ self.completeDiceRolling = finishBlock; }completionBlockpredefined 를 입력해 주세요).completionBlock□□□□□□□□★if( self.completeDiceRolling ){ self.completeDiceRolling(self.dieValue); }
typedef void (^OkBtnBlock)(id data);
typedef void (^CancelBtnBlock)();
@property (nonatomic, strong) OkBtnBlock okBtnBlock;
@property (nonatomic, strong) CancelBtnBlock cancelBtnBlock;
+ (void)foo:(OkBtnBlock)okBtn andCancel:(CancelBtnBlock)btnCancel;
Xcode 4.2에서 작업해야 할 경우 비블록 속성과 마찬가지로 속성으로 선언된 블록을 @synthe size할 수도 있습니다.블록 구문에 얽매이지 마세요.
블록 속성이 다음과 같은 경우:
@property (copy) return_type (^blockName) (var_type);
다음으로 @synthe size는 다음과 같습니다.
@property blockName;
건배.
언급URL : https://stackoverflow.com/questions/9201514/block-declaration-syntax-list
'source' 카테고리의 다른 글
| 2배 값을 소수점 이하 x 자리로 빠르게 반올림 (0) | 2023.04.19 |
|---|---|
| Flutter에서 배경 이미지를 설정하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
| 컴파일러 오류:Objective-C 선택기가 있는 메서드가 동일한 Objective-C 선택기가 있는 이전 선언과 충돌합니다. (0) | 2023.04.19 |
| PowerShell에서는 공간이 경로 분할을 일으킨다. (0) | 2023.04.19 |
| 투명 UIView 뒤에 있는 버튼을 클릭하려면 어떻게 해야 하나요? (0) | 2023.04.19 |