2014-02-20 2 views
0

나는이 있습니다다른 서명으로 블록을 수락하는 방법이 있습니까?

typedef void (^resultMail)(MFMailComposeViewController *controller, MFMailComposeResult result); 
typedef void (^resultMessage)(MFMessageComposeViewController *controller, MessageComposeResult result); 

을하고 나는이 있습니다

- (void)shareMailWithImage:(UIImage *)image 
    onCompletion:(resultMail)result; 

- (void)shareMessageWithImage:(UIImage *)image 
    onCompletion:(resultMessage)result; 

내가이

- (void)shareType:(typeShare)type withImage:(UIImage*)image onCompletion:... 
같은 뭔가 두 가지 방법을 통합하고 싶습니다

typeShare이 같은 typedef 될 것입니다 :

typedef NS_ENUM(NSInteger, typeShare) 
{ 
    kTypeMail = 100, 
    kTypeMessage, 
}; 

내 문제는 onCompletion 블록입니다. 이전 방법에는 각각 하나의 특정 블록 서명이있었습니다.

통합 할 수 있습니까? 내가 그 블록에 대한 서명을 매개 변수로 사용할 수있는 하나의 메서드를 만드는 것을 의미합니까?

답변

1

각 수퍼 클래스의 매개 변수를 허용하도록 블록을 변경하는 것은 어떻습니까? 그냥 매개 변수가 더 일반적인 만들 수 없습니다

typedef void (^result)(UINavigationController *controller, NSInteger result); 
+0

고맙습니다. 그 트릭을 할 것입니다! – SpaceDog

1

..

typedef void (^newResult)(id controller, NSInteger result); 

- (void)shareType:(typeShare)type withImage:(UIImage*)image onCompletion:(newResult)result; 

당신은 당신이 원하는 결과를 블록으로 할 수있는이 방법. 결과적으로 두 블록 모두 컨트롤러와 typedef 정수를 전달합니다.