2015-11-06 1 views
6

Я пытаюсь это сделать, но это говоритSwift For Loop Значение типа «AnyObject?» не имеет ни один из членов «Генератор»

Значение типа "AnyObject? не имеет членства 'Генератор'

Так что это мой код.

let dataDictionary:NSDictionary = try NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 
       var customerArray = dataDictionary.valueForKey("kart") 
       for js: NSDictionary in customerArray { 
        let nameArray: NSArray = js.valueForKey("name") 
       } 

Что я делаю неправильно. Я не понял. Спасибо вам за помощь.

ответ

8

Ваш customerArray является необязательным, он имеет тип AnyObject? (это потому, что .valueForKey возвращает необязательный). Вы не можете перебирать опцию. Решение является приведение результата в виде массива в то время как безопасный разворачивая:

if let customerArray = dataDictionary.valueForKey("kart") as? NSArray { 
    for js in customerArray { 
     let nameArray = js.valueForKey("name") 
     // ... 
    } 
} 
+0

Спасибо, что работали –

+0

Вы радушны. – Moritz

0

Это случилось из-за valueForKey метод возвращает значение OptionalAnyObject типа (AnyObject?). Действительно, AnyObject не имеет элемента Generator и не может использоваться в цикле for..in (а также значение Optional). Таким образом, вы должны разворачивать необязательное значение и привести его к ожидаемому типу, например:

let dataDictionary:NSDictionary = try NSJSONSerialization.JSONObjectWithData(responseObject as! NSData, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary 
var customerArray = dataDictionary.valueForKey("kart")! as! [NSDictionary] 
for js: NSDictionary in customerArray { 
    let nameArray = js.valueForKey("name") as! NSArray 
} 
Смежные вопросы