Objective c 如何使块传递某个类的参数类型?
我在一个标题中定义了一个块,如下所示:Objective c 如何使块传递某个类的参数类型?,objective-c,objective-c-blocks,Objective C,Objective C Blocks,我在一个标题中定义了一个块,如下所示: typedef MyViewClass* (^MyBlock)(UIViewController *viewController); 我需要在几种不同的情况下使用此块,我目前正在这样做: object.block = ^MyViewClass *(UIViewController *viewController) { ... return something; }; 如何定义块,以便在使用时可以直接在参数列表中使用UIViewContr
typedef MyViewClass* (^MyBlock)(UIViewController *viewController);
我需要在几种不同的情况下使用此块,我目前正在这样做:
object.block = ^MyViewClass *(UIViewController *viewController) {
...
return something;
};
如何定义块,以便在使用时可以直接在参数列表中使用
UIViewController
的任何子类?例如,UITableViewController
。当我现在尝试时,会收到编译器警告。我想我在寻找类似于instancetype的东西,只针对一个参数。你不能。它与方法的参数类型没有什么不同。在某些基类中不能有一个方法采用UIViewController
,然后在某些派生类中实现该方法时,该方法不能突然变成UITableViewController
块定义与此类似。它是以一种方式定义的,所有实现都必须遵守该定义
最好是在特定块中创建一个局部变量。例如:
object.block = ^MyViewClass *(UIViewController *viewController) {
UITableViewController *tableViewController = (UITableViewController *)viewController;
...
return something;
};
当然,这是假设您知道块调用程序将真正传递一个
UITableViewController
这是我的担心,我想尝试在块定义中插入强制转换。附笔;与方法相比,我认为头部可以指定UIViewController
,但在任何实现中,您都可以顺利地通过UIViewController
的子类。