Могу ли я добиться многократной отправки между int и NSNumber? - PullRequest
3 голосов
/ 07 декабря 2011

Я пишу некоторый библиотечный код, и пользователи библиотеки иногда имеют разные мнения о том, какие методы должны использовать int и когда использовать NSNumber.Я хотел бы каким-то образом настроить метод так, чтобы либо

[myObject myMethod:5];

, либо

[myObject myMethod:[NSNumber numberWithInt:5]]

работало одинаково.В Java автобокс делает это относительно просто, но я не знаю, как это сделать в target-c.Можно ли сделать эту работу?

Ответы [ 2 ]

4 голосов
/ 07 декабря 2011

Краткий ответ: нет.

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 голос
/ 07 декабря 2011

Нет.Obj-C не имеет автобокса или перегрузки методов.

В Obj-C есть одно средство, которое выполняет автобокс / распаковку, и это кодирование значения ключа, но оно не подходит для таких ситуаций, какэто.

...