В зависимости от объекта, как я могу проверить, является ли объект NSArray или NSDictionary?
Проверьте, является ли объект NSArray или NSDictionary
Ответ 1
if([obj isKindOfClass:[NSArray class]]){
//Is array
}else if([obj isKindOfClass:[NSDictionary class]]){
//is dictionary
}else{
//is something else
}
Ответ 2
Try
[myObject isKindOfClass:[NSArray class]]
и
[myObject isKindOfClass:[NSDictionary class]]
Оба из них должны возвращать значения BOOL. Это базовое использование метода NSObject:
-(BOOL)isKindOfClass:(Class)aClass
Для получения дополнительной информации см. этот ответ здесь: В Objective-C, как я могу проверить тип объекта?
Ответ 3
Рассмотрим случай, когда вы анализируете данные из ответа JSON или XML. В зависимости от используемой вами библиотеки синтаксического анализа вы можете не указывать NSArrays или NSDictionaries. Вместо этого у вас может быть __NSCFArray или __NSCFDictionary.
В этом случае лучший способ проверить, есть ли у вас массив или словарь, - проверить, реагирует ли он на селектор, на который ответит только массив или словарь:
if([unknownObject respondsToSelector:@selector(lastObject)]){
// You can treat unknownObject as an NSArray
}else if([unknownObject respondsToSelector:@selector(allKeys)]){
// You can treat unknown Object as an NSDictionary
}
Ответ 4
На всякий случай, когда кто-то опаздывает на эту вечеринку, ища эквивалент Swift, вы здесь. Это намного более элегантно, чем версия Objective-C, IMHO, потому что он не только проверяет типы, но одновременно отдает их желаемому типу:
if let arrayVersion = obj as? NSArray {
// arrayVersion is guaranteed to be a non-`nil` NSArray
} else if let dictionaryVersion = obj as? NSDictionary {
// dictionaryVersion is guaranteed to be a non-`nil` NSDictionary
} else {
// it neither
}