IPhone Objective-C дизайн foreach

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

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

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

Ответ 1

Вам нужно проверить тип класса:

for (Touch *t in touches) {
  if ([t isKindOfClass:[MoveTouch class]]) {
    MoveTouch *mt = (MoveTouch *)t;
    // do what you want with mt
  }
}

Ответ 2

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

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

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