有没有办法让方法接受具有不同签名的块?

时间:2014-02-20 18:14:07

标签: ios iphone ipad objective-c-blocks

我有这个:

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阻止。以前的每个方法都有一个特定的块签名。

有可能统一吗?我的意思是创建一个方法,可以使用该块的任何签名作为参数?

2 个答案:

答案 0 :(得分:1)

如何更改块以接受相应超类的参数?

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

答案 1 :(得分:1)

难道你不能让参数更通用..

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

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

这样你可以随心所欲地使用结果块。两个块都传入一个控制器,结果是一个typedef整数。