Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 最好允许对象类型为';id';或者为一个方法的两种不同类型提供两个参数?_Iphone_Objective C_Ios_Cocoa Touch_Ipad - Fatal编程技术网

Iphone 最好允许对象类型为';id';或者为一个方法的两种不同类型提供两个参数?

Iphone 最好允许对象类型为';id';或者为一个方法的两种不同类型提供两个参数?,iphone,objective-c,ios,cocoa-touch,ipad,Iphone,Objective C,Ios,Cocoa Touch,Ipad,假设一个方法将要向某个NSMutableArray或NSMutableDictionary添加一个对象。只允许一个类型为id的参数,还是允许两个参数(一个用于数组,一个用于字典)更好 例如: - (void)addObjectToArray:(NSMutableArray *)anArray orDictionary:(NSMutableDictionary *)aDictionary; vs 如果使用第一个选项,我只需将nil作为参数传递给我不需要的任何一个(即,如果

假设一个方法将要向某个NSMutableArray或NSMutableDictionary添加一个对象。只允许一个类型为
id
的参数,还是允许两个参数(一个用于数组,一个用于字典)更好

例如:

- (void)addObjectToArray:(NSMutableArray *)anArray
            orDictionary:(NSMutableDictionary *)aDictionary;
vs


如果使用第一个选项,我只需将
nil
作为参数传递给我不需要的任何一个(即,如果添加到字典,我会将
nil
作为数组参数传递)。

两者都不—我将实现两个单独的方法,一个用于数组,另一个用于字典:

- (void)addObjectToArray:(NSMutableArray *)anArray;
- (void)addObjectToDictionary:(NSMutableDictionary *)aDictionary;
它比以前简单得多,更易于测试和维护

  • 一种具有笨拙签名的方法,根据其参数,其行为不明确(例如,当参数都是
    nil
    或都不是
    nil
    时会发生什么情况);或

  • 一种弱类型方法,它接受任何随机的Objective-C实例,并且无论如何都必须在运行时验证其类型


  • 当然,这两种方法可能做的事情非常相似,因此它们都应该调用另一个包含它们的共享实现的方法(如果可能的话)。没有必要编写两次代码。感谢BoltClock和@JonathanGrynspan。今晚我应该可以花一点时间重新分解代码,之后我想我会接受这个答案。Dictionary需要对象之外的一个键来存储,那么您如何传递该键呢?该键是基于对象作为属性的两个不同整数值构造的。
    - (void)addObjectToArray:(NSMutableArray *)anArray;
    - (void)addObjectToDictionary:(NSMutableDictionary *)aDictionary;