2017-02-14 11 views
0

anyオブジェクトの配列をソートしようとしていますが、できません。AnyObject形式のParseデータベースからデータを取得しています。以下のデータに従って、このAnyObject配列を "NAME"でソートしたいと思います。以下は私のコードです -anyオブジェクトのsort配列Swift 3

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; 
     } 

すべてのヘルプははるかに高く評価されるだろう。ありがとう!

答えて

1

なぜ[[String:Any]]のアレイはDictionaryArrayを意味変換してアレイがオブジェクトとしてDictionary含まコンパイラを伝えるその代わりに[AnyObject]に配列を変換します。

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

注:あなたのようは、私が力を持っている配列のあなたの各辞書でString値を持つNAMEキーを持っている添字でそれを包みました。

2

[AnyObject](I-have-no-ideaの配列)ではなく、辞書の配列[[String:Any]]です。より具体的には、これはエラーを解決します。

Swift 3では、コンパイラはすべての添え字付きオブジェクトの特定の型を知っていなければなりません。

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 
            }) 
関連する問題