Объективный метод c, который принимает типы id и double? - PullRequest
0 голосов
/ 31 января 2012

У меня есть метод, который должен принимать типы double и id.

Я не могу просто обернуть double в оболочку NSNumber из-за обратной совместимости.
Как бы я определил свой метод для приема и double, и id?

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

Итак, выше в скобках указано, что я хотел бы принять, синтаксис только для демонстрации.

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Короче, ты не можешь.Аргументы должны быть только одного типа.Джастин предлагает одно решение, или вы можете определить два метода.

По сути, каждый селектор - каждое имя метода - должно иметь одинаковую аргументацию во всех объявлениях и реализациях.Есть несколько мест, где это правило нарушается в различных рамках, и это причиняет боль.

2 голосов
/ 31 января 2012

Во многих случаях вы напрашиваетесь на неприятности, принимая также id.

Напишите два метода и оберните один другим.

- (void) addDouble: (double) aDouble {
[self addNumber:[NSNumber numberWithDouble:aDouble]];
}

- (void) addNumber: (NSNumber *) aNumber {
// do stuff with your number
}

Среда выполнения отправитправильное сообщение, и у вас есть более подходящая проверка типа для загрузки.

1 голос
/ 31 января 2012

Вы можете написать:

- (void)addDouble:(double)aDouble andObject:(id)anObject;

если предполагается, что это или-или (не совсем понятно из ОП), то рассмотрите отдельные методы или метод, описанный выше, с некоторыми средствами, чтобы определить, является ли используемый параметр double или id (например, если anObject равно nil, будет использовано значение double).

обычно, в этом случае вы будете придерживаться «один параметр + несколько методов». Объект, который содержит информацию, может быть другим (более ясным) решением для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...