2011-11-28 2 views
12

Objective-C 블록을 반환하는 C 함수를 선언하는 구문은 무엇입니까? 가능한가? C 함수에서 Objective-C 블록 반환

가 나는

(void (^)(void)) myFunctionReturningABlock(); 

같은 것을해야하지만이 컴파일되지 않습니다 생각했다.

+1

하는 것은, 조금 정교한 수 ? 그것은 런타임에 깨지거나 컴파일러 오류 또는 경고를 생성합니까? "작동하지 않는 것"이 ​​의미하는 것을 알려 주시면 더 이상 당신을 도울 수 있습니다. – Jasarien

+1

[Objective-C 블록 유형을 반환 값으로 사용] 가능한 복제본 (http://stackoverflow.com/questions/3948173/objective-c-block-type-as-return-value) – Ferruccio

+0

@Jasarien 죄송합니다. 게으른. 결정된. –

답변

15

함수 구문이 약간 잘못되었습니다.

내가 알고있는 것처럼, 당신은 당신이 이런 식으로 함수의 반환 형식으로 사용할 수있는 형태로 블록을 정의해야합니다 : 당신이 작동하지 않습니다 말할 때

typedef void(^MyAwesomeBlock)(void); 

MyAwesomeBlock blockFunction() 
{ 
    MyAwesomeBlock block = ^{ 
     //some code; 
    }; 

    return block; 
} 
+0

감사합니다. 완벽하게 작동합니다. 나는 또한 링크 된 가능한 복제판에서 'typedef-less'버전을 시도했지만 typedef를 사용하면 훨씬 더 명확해진다. –

+0

typedef-less 버전이 있습니까? – nielsbot

+0

@nielsbot 당신이 당신의 바로 위에있는 코멘트를 읽는다면, Nick이 typedef-less를 질문에 대한 코멘트에 링크하여 페이지 위로 올라간다는 것을 알 수 있습니다. 그러나 Nick이 말했듯이, typedef를 사용하면 코드가 훨씬 더 읽기 쉽습니다. 일반적으로 typedef-less 버전을 원하지 않습니다. :/ – Jasarien