완전하게 형성된 블록 (모든 매개 변수가 포함 된 블록)을 메서드에 전달하여 메서드에서 해당 블록을 실행할 수 있습니까?블록을 매개 변수로 전달
- (void) reportSuccessWithBlock:(GenericBlockType)block{
if (block)
{
if (self.returnOnMainThread)
{
dispatch_async(dispatch_get_main_queue(),^
{
block;
});
}
else
{
block;
}
}
}
:
if (//block exists)
{
if (self.returnOnMainThread)
{
dispatch_async(dispatch_get_main_queue(),^
{
//call block here
});
}
else
{
//call block here
}
}
그러나 이상적으로 내가 밖으로 방법과 유사한 방법으로 추상적에 위의 코드 아마도 나머지 미사일을하고 싶습니다 :이 구조 내 프로젝트에서 반복 한 순간
편집 :
블록 유형을 미리 알 수 없습니다.
- 방법은 일반적인 블록을 받아 들일 수 :
그래서 호출 경로는 (가능 내가 모르는) 위의 코드에서 몇 가지 가정이 있습니다이
- (void) someMethod:(void (^)(NSArray *array))success { //Some code here setting up the array to be passed back [self reportSuccessWithBlock:success(array)]; }
처럼 보일 수 있습니다 유형 블록이 모든 파라미터 존재로 전달 실제로
는 블록이 매개 변수의 다른 수를 수용 할 뜻, "블록 자체가 다른 변수의 숫자를 포함 할 수 있습니다"? – trojanfoe
@trojanfoe 내 말은이 방법은 다른 서명을 가진 블록을 받아 들일 수 있어야한다는 것입니다. (void (^) (NSArray * array)) success 또는 (void (^) (NSDictionary * dictionary, NSUInteger value)) 성공 – williamb
블록에 매개 변수를 제공해야하고 그렇지 않은 경우 문제가 될 수 있습니다. 그들이 무엇이 될 것인지를 안다면, 어떻게 할 수 있습니까? 그것은 가능할 수도 있지만 지저분 할 것이고 노력의 가치가있는 것처럼 들리지는 않습니다. – trojanfoe