iPhone Objective-C дизайн foreach - PullRequest
11 голосов
/ 10 ноября 2009

Я пытаюсь реализовать дизайн следующим образом:

Touch class: действует как интерфейс, несколько классов наследуют от него:
MoveTouch класс
JumpTouch класс
InterfaceTouch класс

Тогда я хочу получить список Touch объектов. Затем я хочу иметь возможность удалить ТОЛЬКО все объекты MoveTouch (не остальные), а затем все объекты JumpTouch по отдельности и т. Д. Из этого большого списка. К сожалению, for (MoveTouch* t in touches) не делает то, что я хочу; все во всем списке подвергается действию.

Ответы [ 2 ]

40 голосов
/ 10 ноября 2009

Вам необходимо проверить тип класса:

for (Touch *t in touches) {
  if ([t isKindOfClass:[MoveTouch class]]) {
    MoveTouch *mt = (MoveTouch *)t;
    // do what you want with mt
  }
}
0 голосов
/ 10 ноября 2009

Я не программист Objective C.

В вашем случае, я думаю, вам нужно просмотреть ваш список с этим "for (Touch * in touch)" и в теле выяснить, является ли этот объект MoveTouch или JumpTouch и т. Д.

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

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