我有这样的方法:
-(void)exampleSend:(NSString *)gateway byParams:(NSDictionary *)params{
...
}
现在我想将params
(这是一个输入参数)更改为支持NSDictionary
和NSArray
的内容。我怎样才能在objective-c中做到这一点?
答案 0 :(得分:1)
将类型更改为id
而不是NSDictionary
,并确保在对方法执行任何类特定操作之前检查其NSDictionary
或NSArray
内部的方法,否则会导致崩溃。
-(void)exampleSend:(NSString *)gateway byParams:(id)params{
if([params isKindOfClass:[NSDictionary class]]){
}else{
}
...
}
答案 1 :(得分:1)
Objective-C不支持将两种不同的数据类型传递给同一参数。使用id
是一种选择(根据其他答案的评论,您似乎不喜欢这样做。)
另一个选择是有两种方法。如下所示:
-(void)exampleSend:(NSString *)gateway byParamsDictionary:(NSDictionary *)params{
...
}
-(void)exampleSend:(NSString *)gateway byParamsArray:(NSArray *)params{
...
}
这两种方法会有一些共同的代码。将该公共代码放入第三种方法中,并且根据需要使用这两种方法调用公共方法。这两种方法中的代码应该特定于处理两种不同的参数类型。