我正在编写一些库代码,库的用户有时会对哪些方法应该使用int以及何时使用NSNumber有不同的看法。我想用某种方法设置一个方法,以便
[myObject myMethod:5];
或
[myObject myMethod:[NSNumber numberWithInt:5]]
以同样的方式工作。在Java中,自动装箱使这个相对简单,但我不知道有任何方法可以在objective-c中实现这一点。是否有可能使这项工作?
答案 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中有一个设施执行自动装箱/拆箱,这是键值编码,但它不适合这种情况。