2016-04-15 6 views
0

Ich bin ziemlich neu zu swift so, tragen Sie bitte mit mir :)Gibt es eine andere Möglichkeit, Ausnahme in Range Operator in Swift zu behandeln?

was, wenn in dem folgenden Code

for i in (1...(self.count - 1)) { //(self.count is number of elements in Array Extension) 
    print(i) 
} 

self.count 1. gut

wird .. ich kann funktioniert immer wie folgt

if self.count > 1 
{ 
    for i in (1...(self.count - 1)) { 
     print(i) 
    } 
} 
else 
{ 
    for i in ((self.count - 1)...1) { 
     print(i) 
    } 
} 

aber gibt es einen anderen (wahrscheinlich besseren) Weg, damit umzugehen?

, in denen ich muss nicht verwenden if-else-Steueranweisungen

PS: - wie in den Kommentaren vorgeschlagen, habe ich auch

verwendet haben
for i in [(1...(self.count - 1))] 
{ 
    print(i)   
} 

aber es stürzt immer noch, wenn self.count = 1

+0

'für i in Indizes iterieren wollen {...}' –

+0

herabgestuft meine Antwort Zu einem Kommentar könntest du folgendes verwenden: für i in ** (1 ... (Anzahl> 1? (Anzahl - 1): 1)) ** {print ("\ (i)")} –

+0

@LeoDabus: es stürzt immer noch ab, wenn self.count = 1. Ich habe geändert zu "für i in [(1 ... (self.count - 1))]" –

Antwort

0

auf über alle Array-Indizes iterieren, verwenden, um die ..< Bereichsoperator die die Obergrenze weglässt:

for i in 0 ..< array.count { } 

oder besser:

for i in array.indices { } 

Letzteres hat den Vorteil, dass es funktioniert auch für Sammlungen mit Indizes, die nicht auf Null basieren (wie ArraySlice).

Um alle Indizes durchlaufen, aber die erste,

for i in array.indices.dropFirst() { } 

Arbeiten in allen Fällen, auch wenn das Array leer ist. Sie sollten auch überprüfen, ob Sie wirklich die Indizes benötigen, oder wenn Sie tatsächlich über das Array Elemente, wie

for elem in array.dropFirst() { } 
0

der beste Weg, mit einer Reichweite Ausnahmen zu behandeln ist, nur sie in erster Linie nicht verursachen;)

Warum nicht einfach eine Null verwenden basierte Index und dann später in der Schleife bei Bedarf anpassen?

extension Array { 
    func oneBasedIndices() -> [Int] { 
     return (0..<count).map { return $0 + 1 } 
    } 
} 

Die kleinste Zahl Array ‚s count Mitglied jemals sein kann, ist 0 und 0..<0 wird nie scheitern, so vielleicht so etwas wie diese Erweiterung würde den Trick tun, wenn, was Sie wollen, ist ein Basis-Indizes.

Verwandte Themen