繁体   English   中英

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

[英]NSDictionary in Swift:Cannot subscript a value of type 'AnyObject?' with a index of type '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["subjects"]访问所有主题,到目前为止很好但是当我尝试访问个别主题时,例如jsonResult["subjects"][0] ,Xcode给我错误: Cannot subscript a value of type 'AnyObject?' with an index of type 'Int' Cannot subscript a value of type 'AnyObject?' with an index of type 'Int'有人可以帮我这个吗?

当您下载字典时,如jsonResult["subjects"] ,您将获得一个可选项。 你需要解开Optional。 此外,因为这个字典是从JSON到达的,所以Swift不知道Optional包含什么类型的东西:它被输入为AnyObject - 这就是Swift将Optional描述为AnyObject? 所以,你也告诉斯威夫特什么类型的对象这真的是-这是字典的一个数组,你需要告诉斯威夫特说,否则你将无法使用到它的下标[0]

你可以一次完成这两件事,如下所示:

if let array = jsonResult["subjects"] as? [[NSObject:AnyObject]] {
    let result = array[0]
    // ...
}

如果你非常非常确定你的地面,你可以强制展开和铸造,并将其减少到一行,如下所示:

let result = (jsonResult["subjects"] as! [[NSObject:AnyObject]])[0]

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

至少使用Swift 2,你可以使用jsonResult [“subject”]作为! [AnyObject]

let data = try NSJSONSerialization.JSONObjectWithData(textData!, options: NSJSONReadingOptions.AllowFragments)  
let results = data["results"] as! [AnyObject]
let first = results[0]

你应该尝试,

 var jsonResult:NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary
 let subjhectarry : NSArray = jsonResult["subjects"] as! NSArray
 let yourFirstObj : NSDictionary =  subjhectarry[0] as! NSDictionary

愿这对你有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM