Gibt es in Swift eine Möglichkeit zu überprüfen, ob ein Index in einem Array vorhanden ist, ohne dass ein schwerwiegender Fehler ausgelöst wird?
Ich hatte gehofft, ich könnte so etwas tun:
let arr: [String] = ["foo", "bar"]
let str: String? = arr[1]
if let str2 = arr[2] as String? {
// this wouldn't run
println(str2)
} else {
// this would be run
}
Aber ich verstehe
Schwerwiegender Fehler: Array-Index außerhalb des Bereichs
index < array.count
?index >= 0 && index < array.count
anstatt dass der schlimmste Fall n ist Vergleiche.ArraySlice
, ist der erste Index nicht 0, daher ist diesindex >= 0
keine ausreichend gute Prüfung..indices
funktioniert stattdessen auf jeden Fall.Typerweiterung:
Wenn Sie dies verwenden, erhalten Sie einen optionalen Wert zurück, wenn Sie das Schlüsselwort optional zu Ihrem Index hinzufügen. Dies bedeutet, dass Ihr Programm nicht abstürzt, selbst wenn der Index außerhalb des Bereichs liegt. In Ihrem Beispiel:
quelle
optional
im Parameter lesbar ist. Vielen Dank!Überprüfen Sie einfach, ob der Index kleiner als die Arraygröße ist:
quelle
Fügen Sie etwas Verlängerungszucker hinzu:
Verbessert die Lesbarkeit bei der Stilcodierung
if let
in Verbindung mit Arraysquelle
Sie können dies sicherer umschreiben, um die Größe des Arrays zu überprüfen und eine ternäre Bedingung zu verwenden:
quelle
if
Anweisungen anstelle einerif
Anweisung im Originalcode. Mein Code ersetzt den zweitenif
durch einen bedingten Operator, sodass Sie einen einzelnen behalten können,else
anstatt zwei separateelse
Blöcke zu erzwingen .if
Frage von OP wird im "Dann" -Zweig von Antonios Antwort landen, sodass es zwei verschachtelteif
s geben würde . Ich betrachte OPs Code als kleines Beispiel, also gehe ich davon aus, dass er immer noch einen haben möchteif
. Ich stimme Ihnen zu, dass in seinem Beispielif
nicht notwendig ist. Andererseits ist die gesamte Anweisung sinnlos, da OP weiß, dass das Array nicht genügend Länge hat und keines seiner Elemente vorhanden istnil
, sodass er das entfernenif
und nur seinenelse
Block behalten kann .Swift 4 Erweiterung:
Für mich bevorzuge ich wie Methode.
Vielen Dank an @Benno Kress
quelle
Feststellen, ob ein Array-Index vorhanden ist:
Diese Methode eignet sich hervorragend, wenn Sie keinen Erweiterungszucker hinzufügen möchten:
quelle
Es ist Arbeit für mich, mit indexOutOfBounds umzugehen .
quelle