Dans Swift, existe-t-il un moyen de vérifier si un index existe dans un tableau sans qu'une erreur fatale ne soit générée?
J'espérais pouvoir faire quelque chose comme ça:
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
}
Mais je reçois
erreur fatale: index de tableau hors limites
index < array.count
?index >= 0 && index < array.count
au lieu que le pire des cas soit n comparaisons.ArraySlice
, le premier index ne sera pas 0, donc ceindex >= 0
ne sera pas une vérification suffisante..indices
au lieu de cela fonctionne dans tous les cas.Extension de type:
En utilisant cela, vous obtenez une valeur facultative lorsque vous ajoutez le mot-clé facultatif à votre index, ce qui signifie que votre programme ne plante pas même si l'index est hors de portée. Dans votre exemple:
la source
optional
en paramètre. Merci!Vérifiez simplement si l'index est inférieur à la taille du tableau:
la source
Ajoutez du sucre d'extension:
Améliore la lisibilité lors du
if let
codage de style en conjonction avec des tableauxla source
Vous pouvez réécrire ceci de manière plus sûre pour vérifier la taille du tableau et utiliser une condition ternaire:
la source
if
instructions au lieu d'uneif
instruction dans le code d'origine. Mon code remplace le secondif
par un opérateur conditionnel, vous permettant de garder un seulelse
au lieu de forcer deuxelse
blocs séparés .if
de la question de OP se retrouvera dans la branche "alors" de la réponse d'Antonio, donc il y aurait deuxif
s imbriqués . Je considère le code OP comme un petit exemple, donc je suppose qu'il voudrait toujours un fichierif
. Je suis d'accord avec vous que dans son exempleif
n'est pas nécessaire. Mais là encore, l'instruction entière est inutile, car OP sait que le tableau n'a pas assez de longueur, et qu'aucun de ses éléments ne l'estnil
, donc il pourrait supprimer leif
et ne conserver que sonelse
bloc.Extension Swift 4:
Pour moi, je préfère comme méthode.
Merci à @Benno Kress
la source
Affirmer si un index de tableau existe:
Cette méthodologie est idéale si vous ne souhaitez pas ajouter de sucre d'extension:
la source
C'est un travail pour moi de gérer indexOutOfBounds .
la source