Ответ 1
Вам нужно проверить тип класса:
for (Touch *t in touches) {
if ([t isKindOfClass:[MoveTouch class]]) {
MoveTouch *mt = (MoveTouch *)t;
// do what you want with mt
}
}
Я пытаюсь реализовать проект следующим образом:
Touch
class: действует как интерфейс, наследует несколько классов: MoveTouch
класс JumpTouch
класс InterfaceTouch
класс
Затем я хочу иметь список объектов Touch
. Затем я хочу, чтобы каждый из MoveTouch
объектов (а не другие) мог выделять все объекты MoveTouch
, а затем все JumpTouch
объекты и т.д. Из этого большого списка. К сожалению, for (MoveTouch* t in touches)
не делает то, что я хочу; все во всем списке действует.
Вам нужно проверить тип класса:
for (Touch *t in touches) {
if ([t isKindOfClass:[MoveTouch class]]) {
MoveTouch *mt = (MoveTouch *)t;
// do what you want with mt
}
}
Я не программист Objective C.
В вашем случае, я думаю, вам нужно пройти через свой список с помощью "для (Touch * in touch)", и в теле выясните, является ли этот объект либо MoveTouch, либо JumpTouch и т.д.
Но идея полиморфизма заключается в том, что вы этого не делаете. Вы не сортируете во время цикла. Действие, которое вы хотите выполнить, должно быть определено в интерфейсе, и каждый класс потомков реализует другую реализацию для этого действия. Что такое полиморфизм.