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

max*_*son 4 iphone cocoa-touch objective-c ipad ios

想象一下,一个方法是将一个对象添加到某个NSMutableArray或NSMutableDictionary.是否更好(以及为什么)只允许一个带有类型的参数id,或者允许两个 - 一个用于数组,一个用于字典?

例如:

- (void)addObjectToArray:(NSMutableArray *)anArray
            orDictionary:(NSMutableDictionary *)aDictionary;
Run Code Online (Sandbox Code Playgroud)

- (void)addObjectToArrayOrDictionary:(id);
Run Code Online (Sandbox Code Playgroud)

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

Bol*_*ock 9

两者都没有 - 我实现了两个单独的方法,一个用于数组,一个用于字典:

- (void)addObjectToArray:(NSMutableArray *)anArray;
- (void)addObjectToDictionary:(NSMutableDictionary *)aDictionary;
Run Code Online (Sandbox Code Playgroud)

它比它更简单,更可测试,更易于维护

  1. 一种具有尴尬签名和不明确行为的方法,具体取决于其参数(例如,当参数都是nil或两者都没有时会发生什么nil?); 要么

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

  • 当然,这两种方法可能都做了非常相似的事情,因此它们应该调用另一种包含其共享实现的方法(如果可能的话).编写*code*两次没有任何意义. (5认同)