方法参数中的OR语句

时间:2016-11-13 10:03:29

标签: ios objective-c arguments nsarray nsdictionary

我有这样的方法:

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

现在我想将params(这是一个输入参数)更改为支持NSDictionaryNSArray的内容。我怎样才能在objective-c中做到这一点?

2 个答案:

答案 0 :(得分:1)

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

-(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{
    ...
}

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