Подтвердить что ты не робот

Проверьте, является ли объект NSArray или NSDictionary

В зависимости от объекта, как я могу проверить, является ли объект NSArray или NSDictionary?

4b9b3361

Ответ 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
}