2016-11-13 102 views
0

的论点我有一个方法是这样的:或声明的方法

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

现在我想改变params,这是一个输入参数,以同时支持NSDictionaryNSArray东西。我如何在objective-c中做到这一点?

+0

使用'id'或引入自己的数据类型。 – shallowThought

回答

1

类型更改为id而不是NSDictionary,并确保你应该如果NSDictionaryNSArray执行它的任何类的具体行动之前,你的方法内部检查,否则会导致系统崩溃。

-(void)exampleSend:(NSString *)gateway byParams:(id)params{ 

    if([params isKindOfClass:[NSDictionary class]]){ 

    }else{ 

    } 
    ... 
} 
+0

是的,这是一种可能的解决方案。但我想确保在参数传递中,而不是在方法内部。我在某些方法中看到类似“id或null”的东西,并希望在这种情况下也能找到这样的东西,如果objective-c允许的话。 –

+0

如果我可能会问,那是为什么?即使你传递了一个NSArray或者NSDictionary,你仍然必须根据类使用'if'条件执行任何操作? – Rikh

+0

Objective-C不支持方法重载,所以没有办法完成你之后的工作,而没有引入包装数组或字典的新类型。 – Avi

1

Objective-C不支持将两种不同的数据类型传递给同一个参数。使用id是一种选择(根据其他答案的意见,您似乎不喜欢)。

另一种选择是有两种方法。像下面这样:

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

-(void)exampleSend:(NSString *)gateway byParamsArray:(NSArray *)params{ 
    ... 
} 

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