iPhone как проверить тип объекта?

Я хочу проверить тип объекта. Как я могу это сделать?

Сценарий такой: я получаю объект. Если этот объект относится к типу A, выполните некоторые операции. Если это тип B, выполните некоторые операции. В настоящее время тип объекта - C, который является родительским для A и B.

У меня два класса AViewController иBViewController. Объект, который я попал в UIViewController. Как теперь проверить, является ли объект AViewController или BViewController?


person g.revolution    schedule 02.09.2009    source источник
comment
обман stackoverflow.com/questions/1144629/   -  person ennuikiller    schedule 02.09.2009


Ответы (3)


В NSObject есть несколько методов, позволяющих проверять классы.

Сначала есть -class, который вернет класс вашего объекта. Это вернет либо AViewController, либо BViewController.

Затем есть два метода: -isKindofClass: и isMemberOfClass:.

-isKindOfClass: сравнит получатель с классом, переданным в качестве аргумента, и вернет истину или ложь в зависимости от того, является ли класс тем же типом или подклассом данного класса.

-isMemberOfClass: сравнит получатель с классом, переданным в качестве аргумента, и вернет истину или ложь в зависимости от того, является ли класс строго тем же классом, что и данный класс.

person Jasarien    schedule 02.09.2009

Более распространенный шаблон в Objective-C - проверить, отвечает ли объект интересующим вас методам. Пример:

if ([object respondsToSelector:@selector(length)]) {
    // Do something
}

if ([object conformsToProtocol:@protocol(NSObject)]) {
    // Do something
}
person rpetrich    schedule 02.09.2009
comment
Это правда, но в данном случае не очень помогает. Два объекта, которые интересуют спрашивающего, являются подклассами конкретного контроллера представления. Каждый может реализовать один и тот же метод, но вести себя по-разному. Поэтому ему / ей нужно знать, с каким подклассом они имеют дело. - person Jasarien; 02.09.2009
comment
В таком случае вам, вероятно, следует провести рефакторинг вашего дизайна. isKindOfClass: определенно будет работать, но обычно не очень удобен в обслуживании в долгосрочной перспективе. - person rpetrich; 03.09.2009

person    schedule
comment
Сообщение от @Jasarien более конкретное. Например, сравнение объекта KindOfClass [класс UIView] вернет вам даже все UIImageViews, UIImages, UIRoundRectButtons ..... Так что в этом случае isMemberOfClass может быть лучшим решением. - person Alex Cio; 20.06.2013