方法参数中的 OR 语句
OR statement in the arguments of method
我有这样的方法:
-(void)exampleSend:(NSString *)gateway byParams:(NSDictionary *)params{
...
}
现在我想将输入参数 params
更改为同时支持 NSDictionary
和 NSArray
的内容。我如何在 objective-c 中执行此操作?
将类型更改为 id
而不是 NSDictionary
并确保在执行任何 [=17= 之前检查方法内部是 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{
...
}
好像这两个方法会有一些共同的代码。将该公共代码放入第三个方法中,并让这两个方法中的一个根据需要调用公共方法。这两个方法中的代码应该特定于处理两种不同的参数类型。
我有这样的方法:
-(void)exampleSend:(NSString *)gateway byParams:(NSDictionary *)params{
...
}
现在我想将输入参数 params
更改为同时支持 NSDictionary
和 NSArray
的内容。我如何在 objective-c 中执行此操作?
将类型更改为 id
而不是 NSDictionary
并确保在执行任何 [=17= 之前检查方法内部是 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{
...
}
好像这两个方法会有一些共同的代码。将该公共代码放入第三个方法中,并让这两个方法中的一个根据需要调用公共方法。这两个方法中的代码应该特定于处理两种不同的参数类型。