En Swift, ¿hay alguna forma de verificar si existe un índice en una matriz sin que se genere un error fatal?
Esperaba poder hacer algo como esto:
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
}
Pero consigo
error fatal: índice de matriz fuera de rango

index < array.count?index >= 0 && index < array.countlugar de que el peor de los casos sea n comparacionesArraySlice, el primer índice no será 0, por lo que hacerloindex >= 0no será una verificación lo suficientemente buena..indicesen cambio funciona en cualquier caso.Tipo de extensión:
Con esto, obtiene un valor opcional cuando agrega la palabra clave opcional a su índice, lo que significa que su programa no se bloquea incluso si el índice está fuera de rango. En tu ejemplo:
fuente
optionalen el parámetro. ¡Gracias!Simplemente verifique si el índice es menor que el tamaño de la matriz:
fuente
Agregue un poco de azúcar de extensión:
Mejora la legibilidad al hacer
if letcodificación de estilo junto con matricesfuente
Puede reescribir esto de una manera más segura para verificar el tamaño de la matriz y usar un condicional ternario:
fuente
ifdeclaraciones en lugar de unaifdeclaración en el código original. Mi código reemplaza el segundoifcon un operador condicional, lo que le permite mantener uno solo enelselugar de forzar doselsebloques separados .ifde OP terminará dentro de la rama "entonces" de la respuesta de Antonio, por lo que habría dosifs anidados . Estoy viendo el código de OP como un pequeño ejemplo, así que supongo que todavía querría unif. Estoy de acuerdo con usted en que en su ejemploifno es necesario. Pero, de nuevo, toda la declaración no tiene sentido, porque OP sabe que la matriz no tiene suficiente longitud, y que ninguno de sus elementos lo esnil, por lo que podría eliminarify mantener solo suelsebloque.Extensión Swift 4:
Para mí prefiero como método.
Gracias a @Benno Kress
fuente
Afirmando si existe un índice de matriz:
Esta metodología es excelente si no desea agregar azúcar de extensión:
fuente
Es trabajo para mí manejar indexOutOfBounds .
fuente