source

블록 선언 구문 목록

myloves 2023. 4. 19. 00:41

블록 선언 구문 목록

목적 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

빌어먹을 blocksyntax 웹사이트

유형:

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을 작성했습니다.다이스 값을 셰이크하면 반환됩니다.

  1. returnTypereturnType)을 합니다..h 이상@interface□□□□□□□□★

    typedef void (^CompleteDiceRolling)(NSInteger diceValue);
    
  2. 의 정의@property.h)

    @property (copy, nonatomic) CompleteDiceRolling completeDiceRolling;
    
  3. 서서 with with with with with with with with with with with with로 합니다.finishBlock ).h)

    - (void)getDiceValueAfterSpin:(void (^)(NSInteger diceValue))finishBlock;
    
  4. 에 를 에 삽입합니다..m commit " " " 。finishBlock로로 합니다.@property에 정의하다

    - (void)getDiceValueAfterSpin:(void (^)(NSInteger diceValue))finishBlock{
        self.completeDiceRolling = finishBlock;
    }
    
  5. completionBlock predefined 입력해 주세요).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