sortinganyobject Swift 3的数组

我想sortinganyobject的数组,但无法做到这一点。我从Parse数据库以AnyObject格式获取一些数据。 根据以下数据,我想按“名称”sorting此AnyObject数组。 以下是我的代码 –

let sortedArray = (myArray as! [AnyObject]).sorted(by: { (dictOne, dictTwo) -> Bool in let d1 = dictOne["NAME"]! as AnyObject; // this line gives error "Ambiguous use of subscript" let d2 = dictTwo["NAME"]! as AnyObject; // this line gives error "Ambiguous use of subscript" return d1 < d2 }) 

myArray看起来像这样 –

  { LINK = "www.xxx.com"; MENU = Role; "MENU_ID" = 1; NAME = "A Name"; SUBMENU = "XXX"; "Training_ID" = 2; }, { LINK = "www.xyz.com"; MENU = Role; "MENU_ID" = 2; NAME = "B name"; SUBMENU = "jhjh"; "Training_ID" = 6; }, { LINK = "www.hhh.com"; MENU = Role; "MENU_ID" = 3; NAME = "T name"; SUBMENU = "kasha"; "Training_ID" = 7; }, { LINK = "www.kadjk.com"; MENU = Role; "MENU_ID" = 5; NAME = "V name"; SUBMENU = "ksdj"; "Training_ID" = 1; }, { LINK = "www.ggg.com"; MENU = Role; "MENU_ID" = 4; NAME = "K name"; SUBMENU = "idiot"; "Training_ID" = 8; }, { LINK = "www.kkk.com"; MENU = Role; "MENU_ID" = 6; NAME = "s name"; SUBMENU = "BOM/ABOM/BSM"; "Training_ID" = 12; } 

任何帮助将非常感激。 谢谢!

为什么将数组转换为[AnyObject]而不是将数组转换为[[String:Any]]意味着ArrayDictionary并告诉编译器该数组包含Dictionary作为对象。

 if let array = myArray as? [[String:Any]] { let sortedArray = array.sorted(by: { $0["NAME"] as! String < $1["NAME"] as! String }) } 

注意:由于您在数组的每个字典中都有带有String值的NAME键,所以我强制使用下标包装它。

它不是[AnyObject] (我没有想法的数组),它是字典数组[[String:Any]] 。 更具体地说,这解决了这个错误。

在Swift 3中,编译器必须知道所有下标对象的具体types。

 let sortedArray = (myArray as! [[String:Any]]).sorted(by: { (dictOne, dictTwo) -> Bool in let d1 = dictOne["NAME"]! as String let d2 = dictTwo["NAME"]! as String return d1 < d2 })