2016-04-30 5 views
2

Ich versuche, meinen Code in Swift 2.2 zu konvertieren (ich habe diesen Code seit der Veröffentlichung von Swift 2.0 nicht mehr geöffnet). Eine der Sachen, die ich sehr oft gemacht habe, ist das Konvertieren von Dictionarys in Arrays mit der .array-Funktion von Dictionary-Elementen. Das ist anscheinend keine Funktion mehr. Was soll ich machen? Ich dachte, die .elements-Funktion würde funktionieren, aber ich kann nicht mit einem Array [index] -Befehl ziehen.Konvertieren meines Codes in neue Swift (2.2), Wörterbuch hat keine Array-Funktion?

Danke!

+0

Und was willst du mit diesem Array machen? Wenn Sie zum Beispiel einfach durch Ihr Wörterbuch iterieren möchten, können Sie 'for (Schlüssel, Wert) im Wörterbuch {...}' eingeben, wo Sie jetzt auf 'Schlüssel' und' Wert' in der 'for'-Schleife verweisen können . – Rob

+0

@Rob Nun, zuerst wäre es, nach Namen zu organisieren (für eine UI-Liste), und zweitens wäre es, den Namen des ausgewählten UI-Elements in dieser Liste zu erhalten (also muss ich aus dem Index der sortierten Array-Version von das Wörterbuch) – Max

Antwort

1

Es gibt viele Möglichkeiten, um so etwas zu erreichen. Der einfachste Weg ist das Modell zu ändern, eine Reihe von Wörterbüchern (oder benutzerdefinierte Objekte) sein:

var people = [ 
    ["name": "Rob", "city": "New York", "state": "NY", "street": "11 Wall Street"], 
    ["name": "Jim", "city": "Washington", "state": "DC", "street": "1600 Pennsylvania Avenue"], 
    ["name": "Sue", "city": "Los Angeles", "state": "CA", "street": "4059 Mt Lee Dr."] 
] 

Und wenn Sie, dass durch name sortieren möchten:

people.sortInPlace { return $0["name"] < $1["name"] } 

Oder stellen wir uns vor dass Sie wirklich ein Wörterbuch, in dem eine eindeutige Kennung der Schlüssel:

var people = [ 
    34: ["name": "Rob", "city": "New York", "state": "NY", "street": "11 Wall Street"], 
    42: ["name": "Jim", "city": "Washington", "state": "DC", "street": "1600 Pennsylvania Avenue"], 
    65: ["name": "Sue", "city": "Los Angeles", "state": "CA", "street": "4059 Mt Lee Dr."] 
] 

Sie dann ein Array von Identifikatoren sortiert nach Namen aufbauen können:

let sortedIdentifiers = people.map { return ($0, $1["name"]) } // this builds array of items like `(34, "Rob")` 
    .sort { $0.1 < $1.1 }          // this sorts that array by the second item (e.g. the name) 
    .map { $0.0 }            // just return the identifiers sorted by name 

Sie können nun SUBSCRIPT die sortedIdentifiers, z.B .:

print(people[sortedIdentifiers[0]]) 
print(people[sortedIdentifiers[1]]) 
print(people[sortedIdentifiers[2]]) 

Es gibt viele Möglichkeiten, dies zu bewältigen. Wenn Sie Ihre Frage bearbeiten, um uns zu zeigen, wie Ihr Modell aussieht, können wir möglicherweise spezifischere Lösungen anbieten.