2016-04-08 4 views
1

Ich bemerkte seltsame Dinge, wenn Sie versuchen, Array-Elemente in einer Schleife zu entfernen oder zu verändern. Wenn Sie es jedoch ausführen, während enumerate() auf dem Array aufrufen, funktioniert es wie erwartet. Was ist das Konzept dahinter und wann sollten wir enumerate() verwenden?Wann verwenden Sie in Swift Enumerate für Arrays?

+1

Es ist nicht klar, was Sie fragen. Können Sie ein Beispiel für Ihr Problem mit einer Schleife oder Aufzählung und dem erwarteten und tatsächlichen Verhalten angeben? – JAL

+1

Werfen Sie einen Blick auf http://stackoverflow.com/a/32425212/1187415. –

Antwort

3

die Frage aus dem Titel zu beantworten, Sie enumerate() verwenden, wenn Sie Wert des Index zusätzlich zu dem Wert müssen selbst:

Wenn Sie den Integer-Index der einzelnen Elemente sowie deren Wert benötigen, verwenden Sie die enumerate() Methode, um stattdessen über das Array zu iterieren.

for (index, value) in shoppingList.enumerate() { 
    print("Item \(index + 1): \(value)") 
} 

enumerate() bietet ein sicheres Muster Array-Elemente zum Modifizieren während über sie iterieren:

for (index, (var value)) in shoppingList.enumerate() { 
    if value == "something" { 
     shoppingList[index] = "something-else" 
    } 
} 
+0

Was meinst du mit * "while generate(), die in der regulären Schleife verwendete Methode, nicht." *? - Eine "normale" Schleife ist auch sicher: 'für elem in Array {array.removeAll()}' läuft ohne Probleme. –

+0

@MartinR Das ist schön zu wissen. Ich denke, ich sollte den Grund sowieso nicht kommentieren, weil zu viele Teile im Spiel sein könnten (ist das Element eine Klasse oder eine Struktur, ist die Schleifenvariable a 'var', ist das Array selbst oder nur seine Elemente und bald). Die Idee war natürlich, den niedlichen Trick zu demonstrieren, was mein Kommentar in der Mitte nicht im Geringsten half. Vielen Dank! – dasblinkenlight