如何使块传递某个类的参数类型?

时间:2014-11-16 23:23:47

标签: objective-c objective-c-blocks

我在其中一个标题中定义了一个块,如下所示:

typedef MyViewClass* (^MyBlock)(UIViewController *viewController);

我需要在几种不同的情况下使用这个块,我现在正在这样做:

object.block = ^MyViewClass *(UIViewController *viewController) {
    ...
    return something;
};

如何定义我的块,所以当我使用它时,我可以直接在参数列表中使用UIViewController的任何子类?例如,UITableViewController。当我现在尝试时,我收到编译器警告。我想我正在寻找instancetype行的内容,仅用于参数。

1 个答案:

答案 0 :(得分:0)

你不能。它与方法的参数类型没有什么不同。你不能在某个基类中使用UIViewController的方法,然后在某个派生类中实现该方法时,该方法突然不能成为UITableViewController

块定义类似。它以一种方式定义,所有实现都必须遵循该定义。

您可以做的最好是在特定块中创建一个局部变量。例如:

object.block = ^MyViewClass *(UIViewController *viewController) {
    UITableViewController *tableViewController = (UITableViewController *)viewController;
    ...
    return something;
};

当然,这假设您知道块调用者将真正传递UITableViewController