Проверьте, является ли объект NSArray или NSDictionary - PullRequest
44 голосов
/ 25 октября 2011

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

Ответы [ 4 ]

95 голосов
/ 25 октября 2011
if([obj isKindOfClass:[NSArray class]]){
    //Is array
}else if([obj isKindOfClass:[NSDictionary class]]){
    //is dictionary
}else{
    //is something else
}
13 голосов
/ 25 октября 2011

Попробуйте

[myObject isKindOfClass:[NSArray class]]

и

[myObject isKindOfClass:[NSDictionary class]]

Оба они должны возвращать значения BOOL.Это базовое использование метода NSObject:

-(BOOL)isKindOfClass:(Class)aClass

Для получения дополнительной информации см. Этот ответ здесь: Как в Objective-C как проверить тип объекта?

8 голосов
/ 03 января 2013

Рассмотрим случай, когда вы анализируете данные из ответа 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
}
0 голосов
/ 22 июня 2016

На всякий случай, если кто-то опаздывает на вечеринку в поисках эквивалента 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's neither
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...