Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.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
Ios 方法参数中的OR语句_Ios_Objective C_Arguments_Nsarray_Nsdictionary - Fatal编程技术网

Ios 方法参数中的OR语句

Ios 方法参数中的OR语句,ios,objective-c,arguments,nsarray,nsdictionary,Ios,Objective C,Arguments,Nsarray,Nsdictionary,我有这样一种方法: -(void)exampleSend:(NSString *)gateway byParams:(NSDictionary *)params{ ... } 现在,我想将作为输入参数的params更改为同时支持NSDictionary和NSArray的参数。如何在objective-c中执行此操作?将类型更改为id,而不是NSDictionary,并确保在对其执行任何特定于类的操作之前,应在方法内部检查其NSDictionary或NSArray,否则将导致崩溃 -(v

我有这样一种方法:

-(void)exampleSend:(NSString *)gateway byParams:(NSDictionary *)params{
    ...
}

现在,我想将作为输入参数的
params
更改为同时支持
NSDictionary
NSArray
的参数。如何在objective-c中执行此操作?

将类型更改为
id
,而不是
NSDictionary
,并确保在对其执行任何特定于类的操作之前,应在方法内部检查其
NSDictionary
NSArray
,否则将导致崩溃

-(void)exampleSend:(NSString *)gateway byParams:(id)params{

    if([params isKindOfClass:[NSDictionary class]]){

    }else{

    }
    ...
}

将类型更改为
id
而不是
NSDictionary
,并确保在对其执行任何特定于类的操作之前,应在方法内部检查其
NSDictionary
NSArray
,否则将导致崩溃

-(void)exampleSend:(NSString *)gateway byParams:(id)params{

    if([params isKindOfClass:[NSDictionary class]]){

    }else{

    }
    ...
}

Objective-C不支持将两种不同的数据类型传递给同一个参数。使用
id
是一个选项(根据另一个答案的注释,您似乎不喜欢)

另一个选择是有两种方法。如下所示:

-(void)exampleSend:(NSString *)gateway byParamsDictionary:(NSDictionary *)params{
    ...
}

-(void)exampleSend:(NSString *)gateway byParamsArray:(NSArray *)params{
    ...
}

这两种方法似乎有一些共同的代码。将该公共代码放入第三个方法中,让这两个方法中的任何一个根据需要调用该公共方法。这两种方法中的代码应该专门用于处理两种不同的参数类型。

Objective-C不支持将两种不同的数据类型传递给同一个参数。使用
id
是一个选项(根据另一个答案的注释,您似乎不喜欢)

另一个选择是有两种方法。如下所示:

-(void)exampleSend:(NSString *)gateway byParamsDictionary:(NSDictionary *)params{
    ...
}

-(void)exampleSend:(NSString *)gateway byParamsArray:(NSArray *)params{
    ...
}

这两种方法似乎有一些共同的代码。将该公共代码放入第三个方法中,让这两个方法中的任何一个根据需要调用该公共方法。这两种方法中的代码应专门用于处理两种不同的参数类型。

是的,这是一种可能的解决方案。但我想确保在参数传递中,而不是在方法内部。我在一些方法中看到类似“id或null”的东西,如果objective-c允许的话,我希望在这种情况下也能找到这样的东西。如果我可以问,为什么?即使您传递了NSArray或NSDictionary,您仍然必须根据类的不同使用
if
条件执行操作。Objective-C不支持方法重载,因此如果不引入包装数组或字典的新类型,就无法完成所需的操作。是的,这是一种可能的解决办法。但我想确保在参数传递中,而不是在方法内部。我在一些方法中看到类似“id或null”的东西,如果objective-c允许的话,我希望在这种情况下也能找到这样的东西。如果我可以问,为什么?即使您传递了NSArray或NSDictionary,您仍然需要根据类使用
if
条件来执行操作。Objective-C不支持方法重载,因此无法完成您所追求的目标,不引入包装数组或字典的新类型。使用
id
或引入自己的数据类型。使用
id
或引入自己的数据类型。