Swift: la ejecución se interrumpió por motivos exc_bad_access multidimensional array

Aprender a escribir un código rápido, search en una matriz multidimensional, querer iterar a través de la matriz, retirar la function matemática almacenada en la segunda columna y luego agregar su primer valor de columna a 4 matrices separadas (aún no creadas), por lo que al final Tendré 4 matrices, que contienen el número de la primera columna.

Sin embargo en línea

Function = array3D[index] 

Estoy recibiendo un error: la ejecución rápida fue interrumpida por exc_bad_access

¿Alguien puede ayudar? Código a continuación

 var array3D: [[String]] = [["1", "+"], ["3", "-"], ["5", "x"], ["7", "/"]] var arrayAdd = [""] var arrayMinus = [""] var arrayMultiple = [""] var arrayDivide = [""] var count = array3D.count var countIsZero = false if count != 0 { countIsZero = true } if countIsZero { for index in 0...count { var Function = "" Function = array3D[count][1] println(Function) switch Function { case "+": arrayAdd.append(array3D[count][0]) case "-": arrayMinus.append(array3D[count][0]) case "x": arrayMultiple.append(array3D[count][0]) case "/": arrayDivide.append(array3D[count][0]) default: "" } } } 

count será 4 porque la matriz contiene cuatro elementos. Sin embargo, la indexing está basada en cero, por lo que debe hacer lo siguiente:

 for index in 0...count-1 

para evitar indexar con el número 4 que causaría la exception.

Lo que Klaus dijo es correcto. Adicionalmente:

  • Deberá asegurarse de que cada una de las declaraciones de su case no salga de los límites utilizando el count .
  • Tienes el for index in 0...count , pero nunca te veo usando index , solo count . index será el número que count desde 0.

Buena suerte,
Kyle

Function = array3D[4] refiere a nada <- throw exc_bad_access

Su índice de matriz va de 0 a array3D.count - 1

Debe cambiar su ciclo for a lo siguiente: 0..<count (same as 0...count-1 )

 for index in 0..<count { ... } 

También en su bucle for está utilizando count lugar de index :

Debajo del ciclo corregido:

 for index in 0..<count { var Function = "" Function = array3D[index][1] println(Function) switch Function { case "+": arrayAdd.append(array3D[index ][0]) case "-": arrayMinus.append(array3D[index ][0]) case "x": arrayMultiple.append(array3D[index ][0]) case "/": arrayDivide.append(array3D[index ][0]) default: "" } }