我在其中一个标题中定义了一个块,如下所示:
typedef MyViewClass* (^MyBlock)(UIViewController *viewController);
我需要在几种不同的情况下使用这个块,我现在正在这样做:
object.block = ^MyViewClass *(UIViewController *viewController) {
...
return something;
};
如何定义我的块,所以当我使用它时,我可以直接在参数列表中使用UIViewController
的任何子类?例如,UITableViewController
。当我现在尝试时,我收到编译器警告。我想我正在寻找instancetype
行的内容,仅用于参数。
答案 0 :(得分:0)
你不能。它与方法的参数类型没有什么不同。你不能在某个基类中使用UIViewController
的方法,然后在某个派生类中实现该方法时,该方法突然不能成为UITableViewController
。
块定义类似。它以一种方式定义,所有实现都必须遵循该定义。
您可以做的最好是在特定块中创建一个局部变量。例如:
object.block = ^MyViewClass *(UIViewController *viewController) {
UITableViewController *tableViewController = (UITableViewController *)viewController;
...
return something;
};
当然,这假设您知道块调用者将真正传递UITableViewController
。