2017-02-25 28 views
0

Ich habe eine JSON-Datei wie unten, ich möchte es analysieren und füllen Sie meine Tabellenansicht.swift - JSON-Wörterbuch Parsing

Was will ich bekommen ist "Material", "Kategorien", "product_types"

["facets": { 
     "material" : { 
     "data" : [ 
      { 
      "count" : 3, 
      "value" : "95% Polyester, 5% Spandex" 
      }, 
      { 
      "count" : 1, 
      "value" : "%100 Modal" 
      } 
     ], 
     }, 
     "categories" : { 
     "data" : [ 
      { 
      "id" : "7", 
      "name" : "test" 
      } 
     ], 
     }, 
     "product_types" : { 
     "data" : [ 
      { 
      "count" : 3, 
      "value" : "Sweatshirt" 
      }, 
      { 
      "count" : 1, 
      "value" : "Babet" 
      }, 
     ], 
     } 
    }] 

Mein Code ist:

var list: [String:JSON]? = [:] 
func loadList(){ 
ModafiliAPI.sharedInstance.refine(callback: { (refineList) in 
      if let data = refineList["facets"].dictionaryValue as [String:JSON]?{ 
       self.list = data 
       self.RefineTableView!.reloadData() 
       print(self.refineList!) 
      } 
     }) 
} 

beobachte ich, dass ich "Facetten" aus dem Zugriff auf Druckausgabe. Aber in cellforrowat

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "RefineCell") as! RefineTableViewCell 
     cell.refineList = self.refineList?[indexPath.row] //-->>error 
     return cell 
    } 

Ich erhalte die folgende Fehlermeldung: Ambiguous reference to member 'subscript'

UITableViewCell:

var refineList:[String:JSON]?{ 
     didSet{ 
      self.setupRefineList() 
     } 
    } 
+1

Sie nicht SwiftyJSON im Modell verwendet werden soll. Es ist einfach ein brillantes Werkzeug, um JSON zu * echten * Collection-Typen oder benutzerdefinierten Klassen/Strukturen zu analysieren. Es generiert eine Menge - unnötigen - Overhead zum Deserialisieren der Objekte in der Datenquelle der Tabellenansicht und Delegieren von Methoden. Und deklarieren Sie das Datenquellenarray einer konkreten vorhandenen Tabellensicht nicht als optional. – vadian

Antwort

0

Xcode nicht weiß, welche Art refineList ist, es ist nicht eindeutig für ihn

try

cell.refineList = self.refineList?[indexPath.row] as! [String:JSON] 

Sie können auch überprüfen, welche cell.refineList Typ?

Händler:

guard let list = refineList?[indexPath.row] else { 
     print ("Unexpected error !!") 
     return cell 
} 
cell.refineList:[String:JSON] = list as! [String:JSON] 
+0

Meine Frage wurde mit dem Zellcode aktualisiert. hinzugefügt als! [String: JSON] und ich bekomme den gleichen Fehler. –

+0

Was ist der Typ der RefineList in Ihrer Zelle? Können Sie bitte Ihren UITableViewCell Code senden, kann es hilfreich sein. – iLandes

+0

Bitte überprüfen Sie den unteren Teil meiner Frage. –