ios – Swift中的NSDictionary:不能下标“AnyObject”类型的值吗?索引类型为’Int’

前端之家收集整理的这篇文章主要介绍了ios – Swift中的NSDictionary:不能下标“AnyObject”类型的值吗?索引类型为’Int’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我试图使用 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]

但我无法推荐.有太多方法可以出错.

猜你在找的iOS相关文章