接受类型id和double的Objective c方法?

时间:2012-01-30 20:50:14

标签: objective-c

我的方法必须能够接受doubleid类型。

由于向后兼容性,我不能将double包装在NSNumber包装器中 我如何定义我的方法来接受double和id?

- (void) addBothDoublesAndIds: (id, double) doubleOrObject;

所以上面的括号正是我喜欢接受的,语法只是为了演示。

3 个答案:

答案 0 :(得分:2)

总之,你不能。参数必须只有一种类型。 Justin建议的是一种解决方案,或者您可以定义两种方法。

实际上,每个选择器 - 每个方法名称 - 应该在所有声明和实现中具有相同的论证。在某些地方,这个规则在各种框架中都被打破了,这会导致痛苦。

答案 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(例如,如果anObjectnil,则会使用double值。

通常,在这种情况下,你会坚持使用“单参数+多种方法”。保存信息的对象可能是另一个(更清晰)的解决方案。