我的方法必须能够接受double
和id
类型。
由于向后兼容性,我不能将double包装在NSNumber
包装器中
我如何定义我的方法来接受double和id?
- (void) addBothDoublesAndIds: (id, double) doubleOrObject;
所以上面的括号正是我喜欢接受的,语法只是为了演示。
答案 0 :(得分:2)
实际上,每个选择器 - 每个方法名称 - 应该在所有声明和实现中具有相同的论证。在某些地方,这个规则在各种框架中都被打破了,这会导致痛苦。
答案 1 :(得分:2)
在许多情况下,您也会因接受id
而遇到麻烦。
写两种方法,然后用另一种方法包装。
- (void) addDouble: (double) aDouble {
[self addNumber:[NSNumber numberWithDouble:aDouble]];
}
- (void) addNumber: (NSNumber *) aNumber {
// do stuff with your number
}
运行时会将您的消息发送到正确的消息,并且您需要进行类型检查才能启动。
答案 2 :(得分:1)
你可以写:
- (void)addDouble:(double)aDouble andObject:(id)anObject;
如果它应该是 - 或者(从OP中无法说明),那么考虑单独的方法,或者上面的方法,用一些方法来区分要使用的参数是double
还是id
(例如,如果anObject
为nil
,则会使用double
值。
通常,在这种情况下,你会坚持使用“单参数+多种方法”。保存信息的对象可能是另一个(更清晰)的解决方案。