我有这个:
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
阻止。以前的每个方法都有一个特定的块签名。
有可能统一吗?我的意思是创建一个方法,可以使用该块的任何签名作为参数?
答案 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整数。