ios - 有没有办法让方法接受具有不同签名的 block ?

标签 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堵塞。之前的每种方法都有一个特定的 block 签名。

可以统一吗?我的意思是创建一种可以将该 block 的任何签名用作参数的方法?

最佳答案

改变你的 block 来接受各个父类(super class)的参数怎么样?

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

关于ios - 有没有办法让方法接受具有不同签名的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21916196/

相关文章:

objective-c - 核心数据和10,000个音频文件

使用 iOS 混合模式的 Android 图像和颜色混合

ios - 该应用程序没有有效的签名 Xcode 7.3

javascript - iOS 9 和 El Capitan 搞砸了 CSS

iphone - 最佳高分框架 - iPhone

c++ - 回车在XCode Console C++中不起作用

ios - 在更新到iPhone OS 3.0时,较旧的应用程序是否兼容?

iphone - 显示 CALayer 动画的帧率 (FPS)

iphone - 使用 xCode 4.2 在 Interface Builder 中删除自动布局(约束)

iphone - 强制 UITextField 像 UITextView 的 'editable' 属性一样不可编辑