方法参数中的 OR 语句

OR statement in the arguments of method

我有这样的方法:

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

现在我想将输入参数 params 更改为同时支持 NSDictionaryNSArray 的内容。我如何在 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{
    ...
}

好像这两个方法会有一些共同的代码。将该公共代码放入第三个方法中,并让这两个方法中的一个根据需要调用公共方法。这两个方法中的代码应该特定于处理两种不同的参数类型。