我想计算我的json结果中的“项目”数量,以便我循环。请参阅以下对我不起作用的代码:
var jsonResult:NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: nil) as NSDictionary
for var i = 0; i < jsonResult["items"].count; i++ {}
它给我以下编译错误: “AnyObject?没有名为count的成员”
你能帮我理解背后的原因吗?并且, 你能告诉我周围的工作吗?
感谢您的帮助
答案 0 :(得分:2)
因为您正在解析动态数据,所以编译器无法保证JSON解析器在运行时返回的内容。因此,您从JSON对象检索的任何值都是可选的,您必须显式解包。
您可以在http://www.atimi.com/simple-json-parsing-swift-2/了解相关信息。
我相信现在在Swift中有用于JSON解析的库,这使得这类东西变得更容易。
答案 1 :(得分:1)
由于此jsonResult["items"]
返回AnyObject?
,您必须将其转换为实际类。例如
var dic:NSMutableDictionary = NSMutableDictionary()
dic.setValue(["first","second","third"], forKey: "items")
var json:NSData = NSJSONSerialization.dataWithJSONObject(dic, options: NSJSONWritingOptions.PrettyPrinted, error: nil)!
var jsondic = NSJSONSerialization.JSONObjectWithData(json, options:NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
var jsonItems = jsondic["items"] as NSArray
for var i = 0;i < jsonItems.count; i++ {
println(jsonItems[i] as String)
}
这是关键
var jsonItems = jsondic["items"] as NSArray
你可以使用“as?”,这样如果转换失败,你的app就不会崩溃
var jsonItems = jsondic["items"] as? NSArray
if(jsonItems != nil){
for var i = 0;i < jsonItems!.count; i++ {
println(jsonItems![i] as String)
}
}