Кастинг Тип класса

Я знаю, что можно определить свойство класса, которое отвечает на данный протокол, например:

Class <MyProtocol> class = [object class];

Но есть ли способ в Objective-C применить класс класса к моему классу?

Class unknownClass = [object class];
[((MyClass)unknownClass) myMethod]; // How can I cast Class to MyClass?

Ответы

Ответ 1

То, что вы просите, на самом деле не имеет никакого смысла.

unknownClass указывает на объект класса. Class - это просто тип, который может содержать любой указатель на объект класса. Вы вызываете метод класса, отправляя сообщение объекту класса.

Class, например id, отключает проверку статического типа. Это означает, что компилятор не будет жаловаться на то, что объект может не отвечать на этот метод. Поэтому вы должны просто отправить сообщение. "Кастинг" не имеет никакого смысла. Если вы получаете ошибку en, что нет интерфейса, объявляющего этот метод, тогда у вас есть совершенно не связанная проблема, которая не имеет ничего общего с типами; вместо этого метод не объявляется ни в каком видимом заголовке.

Вы говорите в комментариях к другому ответу, что "я знаю, что" unknownClass "на самом деле является типом MyClass". Это делает ваш вопрос еще менее понятным - почему бы просто не использовать MyClass непосредственно? вместо unknownClass? Как [MyClass myMethod];

Ответ 2

obj->isa = [NewClass class];

Это должно изменить класс объекта.

При этом я надеюсь, что вы знаете, что делаете.