2015-11-06 76 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方法返回AnyObject类型(AnyObject?)的Optional值。确实,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 
} 
相关问题