更好地允许“id”的对象类型或为方法的两种不同类型提供两个参数?
Posted
技术标签:
【中文标题】更好地允许“id”的对象类型或为方法的两种不同类型提供两个参数?【英文标题】:Better to allow an object type of 'id' or provide two arguments for two different types for a method? 【发布时间】:2011-10-18 01:16:52 【问题描述】:想象一个方法要将一个对象添加到某个 NSMutableArray 或 NSMutableDictionary。是只允许一个类型为id
的参数更好(以及为什么),还是允许两个——一个用于数组,一个用于字典?
例如:
- (void)addObjectToArray:(NSMutableArray *)anArray
orDictionary:(NSMutableDictionary *)aDictionary;
对比
- (void)addObjectToArrayOrDictionary:(id);
如果使用第一个选项,我只需将 nil
作为参数传递给我不需要的任何一个(即,如果添加到字典,我会将 nil
作为数组参数传递)。
【问题讨论】:
字典除了要存储的对象之外还需要一个键,那么您如何传递该键? 键是根据对象作为属性的几个不同整数值构造的。 【参考方案1】:两者都没有——我会实现两种不同的方法,一种用于数组,一种用于字典:
- (void)addObjectToArray:(NSMutableArray *)anArray;
- (void)addObjectToDictionary:(NSMutableDictionary *)aDictionary;
它比
更简单、更可测试和更易于维护一个带有尴尬签名的方法,其行为取决于其参数(例如,当参数都是 nil
或两者都不是 nil
时会发生什么?);或
一种弱类型方法,它接受任何随机的 Objective-C 实例,并且无论如何都必须在运行时验证其类型。
【讨论】:
当然,这两种方法可能做的事情非常相似,所以它们都应该调用另一个包含它们共享实现的方法(如果可能的话)。编写代码没有意义> 两次。 感谢 BoltClock 和 @JonathanGrynspan。今晚我应该可以花点时间重构我的代码,之后我想我会接受这个答案。以上是关于更好地允许“id”的对象类型或为方法的两种不同类型提供两个参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用python在mongodb的两种不同类型的字段或索引或标题中搜索值?