更好地允许“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的两种不同类型的字段或索引或标题中搜索值?

JS中的两种数据类型以及实现引用类型的深拷贝

这个 Python 类型提示语法是啥,括号中的两种类型?

C# web api返回类型设置为json的两种方法

从基本 asp.net 身份用户创建继承用户或为每个角色实现不同的接口? [关闭]

知识点1