2016-09-09 2 views
0

Also ich versuche, eine Tabellenansicht zu erstellen, die Informationen aus einer Quelle, die ich bereits ausgeheckt habe, nehme ein anderer View-Controller Ich habe einige Probleme, wenn ich versuche, die Informationen in die Zellen der Tabellenansicht zu ziehenSwift - Fehler "Kann einen Wert von '[String: DayData]' nicht mit einem Index von 'Int' indexieren

Ich erhalte den Fehler "Kann einen Wert von '[String: DayData]' nicht mit angeben ein Index von tye ‚Int‘“auf der Linie, die mit‚var (Datum, Vertrieb, doorsKnocked ...‘

ich bin mir nicht sicher, wie dies zu beheben. Kann jemand es herausfinden? Vielen Dank!

import Foundation 
import UIKit 


var allInformationByDate = [ 
"2016-08-13": DayData(sales: 0, doorsKnocked: 0, milesWalked: 0.00, hoursWorked: 0.00) 
] 

struct DayData { 
let sales: Int 
let doorsKnocked: Int 
let milesWalked: Double 
let hoursWorked: Double 
} 

class historyViewController: UIViewController, UITableViewDataSource { 

//return Int, how many sections in table 
func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

//return Int, how many rows in table 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return allInformationByDate.count 
} 

//what are the contents of each cell 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = UITableViewCell() 

    var (date, sales, doorsKnocked, milesWalked, hoursWorked) = allInformationByDate[indexPath.row] 

    return cell 
} 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

} 
+0

'allInformationByDate' ist ein * Wörterbuch *, kein Array. –

+0

@MartinR Also bin ich verloren? Wie kann ich es für meine Tabellenansicht verwenden? – adman

+0

Ich möchte in der Lage sein, Schlüssel und Werte aufzulisten. Thanks – adman

Antwort

2

Ihre allInformationByDate ist ein Wörterbuch die die Schlüssel und Werte in nicht spezifizierten Reihenfolge enthält, und nicht mit einem ganzzahligen Index zugegriffen werden kann.

Sie sollten ein Array erstellen, das die Daten in der gewünschten Reihenfolge enthält. In Ihrem Fall

let sortedDates = allInformationByDate.keys.sort() 

würde funktionieren. Dann können Sie die Daten für einen Indexpfad wie folgt abrufen

let date = sortedDates[indexPath.row] 
let dayData = allInformationByDate[date]! // We _know_ that the dictionary value exists. 
+0

Das ist großartig, vielen Dank! Weißt du, wie man den zusätzlichen Unsinn, der durchkommt, loswird, so haben wir nur das Datum und dann die tatsächlichen Zahlen? http://imgur.com/a/aVjUO – adman

+1

@adman: Zuerst müssen Sie den Wörterbuchwert auspacken, um die "Optional" loszuwerden, ich habe die Antwort entsprechend aktualisiert. Dann können Sie die einzelnen Felder ('dayData.sales', ...) in einem beliebigen Format ausdrucken. Oder suchen Sie das Protokoll "CustomStringConvertible", um eine benutzerdefinierte Ausgabe Ihrer DayData-Struktur zu definieren. –

+0

Wow, du bist ein Magier. Bravo, guter Herr. – adman

Verwandte Themen