NSArray *classes = @[[NSArray class], [NSDictionary class], [NSSet class]];
id inputObject = [NSSet new];
for (Class class in classes) {
if ([inputObject isKindOfClass: class]) {
return true;
}
}
return false;
Вы обычно хотите isKindOfClass
, который также проверяет, является ли тип подклассом данного типа. Если вы хотите знать, что это точно такой же класс, вы можете использовать isMemberOfClass
, но вы часто можете быть удивлены. Например:
[[NSSet new] isMemberOfClass:[NSSet class]] == false
!!!!
Почему NSSet не является NSSet? Поскольку NSSet является кластером классов, и в этом случае «реальный» тип является внутренним подклассом реализации, называемым __NSSetI. Подобные вещи часто случаются в Objective-C, поэтому вы обычно имеете в виду isKindOfClass
, если у вас нет особой нужды.