2012-05-15 5 views
0

Есть ли способ бросить класс, не зная непосредственно фактический класс?Кастинг класса без непосредственного знания?

E.g.

if ([editedObject isKindOfClass:[object class]]) 
{ 
    object = editedObject; 
} 

У меня есть этот код, я передаю объект методу, называемому «объектом». Пусть говорит object класс Person, но он также может быть классом Animal. Так что я не могу это сделать:

object = (Person *)editedObject;

Потому что я не знаю точно его что класс. Итак, как я могу отбросить класс, не зная его напрямую?

Спасибо.

+0

Почему вы хотите бросить? (Кстати, это невозможно). –

+0

Объект мог бы образовывать несколько разных подклассов NSManagedObject и вместо того, чтобы вручную обрабатывать каждую из них, я пытался создать метод, из которого я мог бы просто передать объект, и из этого объекта получить его класс. –

+0

Но кастинг не влияет на динамический стиль Objective-C. Если вы отбрасываете объект (Person *), который не сделает его (Person *), просто обманите компилятор, полагая, что это так. Он не будет отвечать на сообщения Лица и т. Д. –

ответ

0

То, что вы пытаетесь сделать, не имеет смысла. Различные типы указателей объектов - это чисто компилируемая вещь. Бросок из одного типа указателя объекта в другой предназначен исключительно для синтаксического удобства и не выполняет никаких «операций» во время выполнения (он даже не проверяет, является ли объект типом, на который вы его применили).

Так что, если вы «не знаете» тип во время компиляции, тогда нет синтаксического удобства, чтобы воспользоваться литьем. Поэтому нет никакого смысла «кастинга».

Смежные вопросы