2015-03-14 4 views
0

У меня есть массив объектов словаря. В цикле for я хочу проверить, есть ли каждый объект в массиве isKindOfClass словарь или нет.Check isKindOfClass to Dictionary in Swift

var xxxStatus = jsonResponse as Dictionary<String, AnyObject> 
var applications = xxxStatus["status"] as NSArray! 

for application in applications { 
    if application.isKindOfClass(Dictionary) { 
     //Im getting this error in above if statmet "Type Dictionary<Type, Value> does not confirm to protocol 'AnyObject'"   
    } 
} 

Как использовать isKindOfClass для словаря? Независимо от того, не требуется ли проверка или что я делаю неправильно?

Спасибо!

ответ

1

Это потому, что isKindOfClass требует тип AnyClass - то есть тип, который является классом. Словари не являются классами, они являются структурами и, следовательно, не могут удерживаться AnyObject.

Если вы переключите свой код на application.isKindOfClass(NSDictionary), он должен работать (работа в том смысле, что он будет скомпилирован, и проверьте, является ли тип NSDictionary).

+0

Хорошее объяснение. Благодаря! – selva

6

Это может быть выполнено несколькими способами. Если вы знаете, ключ и значение типа вы можете проверить с помощью is так:

for application in applications { 
    if application is Dictionary<String, AnyObject> { 
     // Do something 
    } 
} 

Вы также можете использовать условное назначение:

for application in applications { 
    if let applicationDictionary = application as [String: AnyObject] { 
     // Do something 
    } 
} 

В качестве альтернативы, если вы хотите, чтобы убедиться, что он является экземпляром NSDictionary вы можете использовать application.isKindOfClass(NSDictionary).