所以我试图使用
swift解析
JSON中的一些数据.下面是我的代码
var jsonResult:NSDictionary! = NSJSONSerialization.JSONObjectWithData(data,options: NSJSONReadingOptions.MutableContainers,error: nil) as! NSDictionary println(jsonResult)
{ count = 100 subjects = ( { alt = "....." name = "....." },{ alt = "....." name = "....." },...... ) }
然后我尝试使用jsonResult [“subject”]访问所有主题,到目前为止一切顺利
但是当我尝试访问个别主题时,例如jsonResult [“subject”] [0],Xcode给出了错误:
不能下标“AnyObject”类型的值吗?索引类型为’Int’
有人可以帮我弄这个吗?
解决方法
当您下载字典时,如jsonResult [“subject”],您将获得一个可选项.你需要解开Optional.此外,因为这个字典是从JSON到达的,所以Swift不知道Optional包含什么类型的东西:它被输入为AnyObject – 这就是Swift将Optional描述为AnyObject的原因.所以你也告诉Swift这是什么类型的对象 – 它是一个字典数组,你需要告诉Swift,否则你将无法使用[0]下标它.
你可以一次完成这两件事,如下所示:
if let array = jsonResult["subjects"] as? [[NSObject:AnyObject]] { let result = array[0] // ... }
如果你非常非常确定你的地面,你可以强制展开和铸造,并将其减少到一行,如下所示:
let result = (jsonResult["subjects"] as! [[NSObject:AnyObject]])[0]
但我无法推荐.有太多方法可以出错.