Ios 错误消息=>;使用';下标';发现此候选字典数组的强制转换问题
我不知道这是否是问题所在,但我的项目中有Alamofire,当我将FireBase添加到我的项目中时,我收到以下错误消息: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![“模型”]作为?[任何对象
如果让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
{
...