【问题标题】:Better to allow an object type of 'id' or provide two arguments for two different types for a method?更好地允许“id”的对象类型或为方法的两种不同类型提供两个参数?
【发布时间】:2011-10-18 01:16:52
【问题描述】:

想象一个方法要将一个对象添加到某个 NSMutableArray 或 NSMutableDictionary。是只允许一个类型为id 的参数更好(以及为什么),还是允许两个——​​一个用于数组,一个用于字典?

例如:

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

对比

- (void)addObjectToArrayOrDictionary:(id);

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

【问题讨论】:

  • 字典除了要存储的对象之外还需要一个键,那么您如何传递该键?
  • 键是根据对象作为属性的几个不同整数值构造的。

标签: iphone objective-c ios cocoa-touch ipad


【解决方案1】:

两者都没有——我会实现两种不同的方法,一种用于数组,一种用于字典:

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

它比

更简单、更可测试和更易于维护
  1. 一个带有尴尬签名的方法,其行为取决于其参数(例如,当参数都是 nil 或两者都不是 nil 时会发生什么?);或

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

【讨论】:

  • 当然,这两种方法可能做的事情非常相似,所以它们都应该调用另一个包含它们共享实现的方法(如果可能的话)。编写代码没有意义> 两次。
  • 感谢 BoltClock 和 @JonathanGrynspan。今晚我应该可以花点时间重构我的代码,之后我想我会接受这个答案。
猜你喜欢
  • 2012-06-02
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
相关资源
最近更新 更多