Ios 错误消息=>;使用';下标';发现此候选字典数组的强制转换问题

Ios 错误消息=>;使用';下标';发现此候选字典数组的强制转换问题,ios,swift,firebase,dictionary,subscript,Ios,Swift,Firebase,Dictionary,Subscript,我不知道这是否是问题所在,但我的项目中有Alamofire,当我将FireBase添加到我的项目中时,我收到以下错误消息: 如果让json=((尝试?JSONSerialization.jsonObject(with:data!,options:JSONSerialization.ReadingOptions.allowFragments)作为?[String:AnyObject])作为[String:AnyObject]??), var models=json![“模型”]作为?[任何对象

我不知道这是否是问题所在,但我的项目中有Alamofire,当我将FireBase添加到我的项目中时,我收到以下错误消息:


如果让json=((尝试?JSONSerialization.jsonObject(with:data!,options:JSONSerialization.ReadingOptions.allowFragments)作为?[String:AnyObject])作为[String:AnyObject]??),
var models=json![“模型”]作为?[任何对象]
{
如果(models.count>=1&&models[0].name!=“”)
{
打印(模型项)
}
如果(models.count>1)
{
models=(models as![[String:Any]])。排序(按:{(dictOne,dictTwo)->Bool-in
设d1=dictOne[“name”]!as!字符串
设d2=dictTwo[“name”]!as!字符串
返回d1
有冲突吗


提前感谢。

您已将
模型定义为
[AnyObject]
,即
任何对象的数组。因此
模型
任何对象
的一个实例,编译器无法推断它是什么,因此如果没有更具体的类型,就无法订阅它

如果使用类型为
[[String:Any]]
的新变量,则应可以正常工作

[Dictionary]
是等效的,但对我来说,较短的语法更可读。

@shim Yep,这很好,我认为它是等效的。非常感谢。你可以把你的答案写出来,我会验证它
 if let json = ((try?  JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as? [String:AnyObject]) as [String : AnyObject]??),
                            var models = json!["models"] as? [AnyObject]
                        {
                            if (models.count >= 1 && models[0].name != "")
                            {
                                print(modelItems)
                            }
                            if (models.count > 1)
                            {
                                models = (models as! [[String:Any]]).sorted(by: { (dictOne, dictTwo) -> Bool in
                                    let d1 = dictOne["name"]! as! String
                                    let d2 = dictTwo["name"]! as! String
                                    
                                    return d1 < d2
                                }) as [AnyObject]
                            }
                            
                            for model in models
                            {
                                if let slots = model["slots"] as? [AnyObject],
                                    let idModel = model["id"] as? Int,
                                    let description = model["description"] as? String,
                                    let name = model["name"] as? String
                                {
...