2016-04-01 5 views
2

Ich versuche, die folgenden Elemente aus einem Array von Wörterbüchern für den Zugriff auf und ich habe zwei Probleme (beide sind unterschiedliche Ansätze) Die. Array von Wörterbüchern wird wie folgt initialisiert:Swift for-Schleife „Expression Typ‚[[String: String]]‘ist nicht eindeutig, ohne mehr Kontext

var testingArray = [[String: String]()] 

testingArray.append(["name": "Ethiopia", "url": "localhost:8088"]) 
testingArray.append(["name": "Bugatti", "url": "localhost:8088"]) 
testingArray.append(["name": "Brazil", "url": "localhost:8088"]) 
testingArray.append(["name": "Jasmine", "url": "localhost:8088"]) 
testingArray.append(["name": "Hello", "url": "localhost:8088"]) 

die erste Methode:

for (k,v) in testingArray { 
    // code here 
} 

nicht aufgrund laufen (die die for-Schleife auf der Leitung erscheint, wird initialisiert):

"Expression type '[[String : String]]' is ambiguous without more context 

Die zweite Methode:

for indices in testingArray { 
    for(k, v) in indices { 
     print(indices.keys) 
    } 
} 

gibt die folgende:

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Ethiopia"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Ethiopia"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Bugatti"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Bugatti"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Brazil"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Brazil"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Jasmine"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Jasmine"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Hello"], _transform: (Function)) 

LazyMapCollection<Dictionary<String, String>, String>(_base: ["url": "localhost:8088", "name": "Hello"], _transform: (Function)) 

Hier ist Pseudo-Code Äquivalent, das ich zu erreichen bin versucht:

for(int i = 0; i < sizeOfArray; i++ { 
    print testingArray[i]."name" 
    print testingArray[i]."url" 
} 

Ich habe meinen Kopf wurde Kratzen über dies seit Tagen, aber ich weiß nicht, schnell und seine Idiome gut genug, um dies allein zu lösen, würde jede Hilfe sehr geschätzt werden (vor allem wenn wir herausfinden können, wie wir # 1 arbeiten können).

+0

Um eine schnelle Array mit Indizes iterieren, https://stackoverflow.com/a/24028458/958064 sehen - Swift 3.0 ein fügt 'enumerated()' Methode, die OP hier helfen würde – sbauch

Antwort

4

Ich stimme die Fehlermeldung verwirrend/irreführend ist. Aber for (k,v) in testingArray macht keinen Sinn, denn testingArray ist ein Array, kein Wörterbuch. Seine Elemente sind Wörterbücher.

Ich glaube, du bist für so etwas suchen:

for obj in testingArray { 
    print(obj["name"]) 
    print(obj["url"]) 
} 
+0

danke! Es wirkt wie ein Zauber. Dies ist das erste Mal, dass ich Wörterbücher verwende, damit ich die richtige Syntax gut verstehe, das erste Mal ist es wirklich wichtig für mich. Es funktioniert, auch nur eine Nebenfrage, da Wörterbücher ungeordnet und nicht aufzählbar sind, wenn ich von plist zu einem PickerView laden möchte, ist der einfachste Ansatz, alle meine Wörterbuchkv-Paare in einem Array zu speichern, ja? –

+0

Wenn Sie sie in einer bestimmten Reihenfolge benötigen, ist es am einfachsten, sie in einem Array zu haben. Wenn jedes Objekt mehrere Eigenschaften enthält (z. B. ein "Anzeigename" und ein "Bezeichner"), ist es sinnvoll, ein Array von Wörterbüchern zu verwenden, wie Sie es in Ihrem Beispiel getan haben. (Allerdings Wörterbücher * sind * enumerable: in meinem Beispiel, könnten Sie eine innere Schleife tun wie 'für (k, v) in obj {...})' – jtbandes

+0

wenn Sie enumerable sagen, das bedeutet kann ich die Werte erhalten aus einem Wörterbuch innerhalb dieser Funktion: 'PickerView (PickerView: UIPickerView, titleForRow Zeile: Int, forComponent Komponente: Int) -> String? {} 'so:' dictionary [row] ["name"] '? –

Verwandte Themen