我可以在int和NSNumber之间实现多次调度吗?

时间:2011-12-06 22:23:06

标签: objective-c types casting type-conversion nsnumber

我正在编写一些库代码,库的用户有时会对哪些方法应该使用int以及何时使用NSNumber有不同的看法。我想用某种方法设置一个方法,以便

[myObject myMethod:5];

[myObject myMethod:[NSNumber numberWithInt:5]]

以同样的方式工作。在Java中,自动装箱使这个相对简单,但我不知道有任何方法可以在objective-c中实现这一点。是否有可能使这项工作?

2 个答案:

答案 0 :(得分:4)

简答:不。

Objective-C不支持函数/方法重载,就像在C ++中一样。

通常,如果您需要支持不同的数据类型,您将创建不同的方法 请注意,您可以自己转换传递的值,因此您不必编写(复制/粘贴)相同的代码。

例如:

- ( void )methodWithInt: ( int )val
{
    [ self methodWithNumber: [ NSNumber numberWithInt: val ] ];
}

- ( void )methodWithLong: ( long )val
{
    [ self methodWithNumber: [ NSNumber numberWithLong: val ] ];
}

- ( void )methodWithNumber: ( NSNumber * )num
{
    /* Effective code */
}

最后,所有内容都将重定向到methodWithNumber方法。

答案 1 :(得分:1)

没有。 Obj-C没有自动装箱或方法重载。

Obj-C中有一个设施执行自动装箱/拆箱,这是键值编码,但它不适合这种情况。