2016-08-02 23 views
2

Während ich versuche, eine for in-Schleife zu erstellen, gibt es mir einen Fehler, der besagt "Kann Bereich mit Ende < Start nicht bilden". Wert von i kommt 4362626962. Wie kann ich es beheben?Bereich kann nicht mit Ende erstellt werden <start

for i in 1...slashList.count{ 
     let index = slashList[i] 

     if !quotaList.contains(index+1) 
     { 
     slashList.removeAtIndex(index) 
     } 
    } 

Vielen Dank im Voraus!

+0

einfach nicht Ihre slashList machen <1 –

Antwort

1

Ihr für zwei Probleme:

  1. Wenn slashList.count 0 (weil slashList leer ist), es würde versuchen, von 1 bis 0 zu zählen, indem man 1 addiert (was zu einer Endlosschleife führt), deshalb gibt der Compiler Ihnen den Fehler start > end.
  2. wenn slashList.count größer als 0 (slashList nicht leer ist), wäre es einen Index verwenden, die außerhalb der Grenzen ist, weil Sie 1-slashList.count zählen, während die Indizes 0-slashList.count - 1 gehen

zu überprüfen sie alle Indizes sollte es sein:

for i in 0 ..< slashList.count { 
    // your code 
} 

das erste Element zu ignorieren (Index 0) tun:

for i in 1 ..< slashList.count { 
    // your code 
} 

für Ihren speziellen Fall, so scheint es mir besser etwas wie zu tun:

for element in slashList {  
    if !quotaList.contains(element+1) 
    { 
     slashList.removeObject(element) 
    } 
} 

können Sie removeObject von this answer verwenden. Wenn aus irgendeinem Grund, auch Sie den Index benötigen, tun:

for (index, element) in slashList.enumerate() { 
    // your code 
} 
+0

danke! Es funktionierte. – slytrkmn

+0

Wenn Ihr Problem gelöst ist, akzeptieren Sie bitte die Antwort. – Daniel

0

Versuchen mit, es sollte 0 sein .. nicht 1 ...

for i in 0..slashList.count{ 
    let index = slashList[i] 

    if !quotaList.contains(index) 
    { 
    slashList.removeAtIndex(index) 
    } 
} 
0

Warum starten Sie Schleife aus dem Index 1 statt 0? Wenn Sie das wirklich benötigen, müssen Sie, wenn slashList leeres Array überprüfen:

if !slashList.isEmpty { 
    // your code here 
} 

auch Entfernen von Elementen aus dem Array Numerierstempel Sie schlechte Praxis. Angenommen, Sie von 0 bis Schleife wollen, dann gibt swifty Weg zu bekommen, was Sie wollen:

slashList = slashList.enumerate().flatMap{quotaList.contains($0.index + 1) ? $0.element : nil}