Ответ 1
if([some_object isKindOfClass:[A_Class_Name class]])
{
// do somthing
}
Я хочу проверить тип объекта. Как я могу это сделать?
Сценарий: я получаю объект. Если этот объект имеет тип A, выполните некоторые операции. Если это тип B, выполните некоторые операции. В настоящее время тип объекта - это C, который является родителем A и B.
У меня есть два класса AViewController
и BViewController
. Объект, который я получаю в UIViewController
. Теперь, как проверить, является ли объект AViewController
или BViewController
?
if([some_object isKindOfClass:[A_Class_Name class]])
{
// do somthing
}
В NSObject есть несколько методов, которые позволяют вам проверять классы.
Сначала там -class
, который вернет класс вашего объекта. Это вернет либо AViewController, либо BViewController.
Тогда существуют два метода: -isKindofClass:
и isMemberOfClass:
.
-isKindofClass:
будет сравнивать приемник с классом, переданным в качестве аргумента, и возвращать true или false на основании того, является ли класс одним и тем же типом или подклассом данного класса.
-isMemberOfClass:
сравнивает приемник с классом, переданным в качестве аргумента, и возвращает true или false на основании того, является ли класс строго тем же классом, что и данный класс.
Более общий шаблон в Objective-C - это проверка того, отвечает ли объект методам, которые вас интересуют. Пример:
if ([object respondsToSelector:@selector(length)]) {
// Do something
}
if ([object conformsToProtocol:@protocol(NSObject)]) {
// Do something
}