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
或引入自己的数据类型。