Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何使块传递某个类的参数类型?_Objective C_Objective C Blocks - Fatal编程技术网

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
的子类。