Estoy aprendiendo el desarrollo de iOS y recientemente he encontrado un problema al intentar manipular una matriz de tuplas.
Obtengo el siguiente post de error:
No se puede subcribir un valor de tipo '[(String, Int)]' con un índice de tipo '(String, Int)'
El código que lo genera es el siguiente:
justStrings.append(filtenetworkingRestraunts[i2].0)
La function en su set es la siguiente:
func filterBySliderValue () -> [String] { var filtenetworkingRestraunts: [(String, Int)] for var i = 0; i < restraunts.count; i++ { if restraunts[i].1 > Int(starSlider.value) { filtenetworkingRestraunts.append(restraunts[i]) } else {filtenetworkingRestraunts.append(("", 1))} } var justStrings: [String] var i2 = 0 for i2 in filtenetworkingRestraunts { justStrings.append(filtenetworkingRestraunts[i2].0) } return justStrings }
Este es el restraunts de la matriz:
var restraunts: [(String, Int)] = [("Dallas BBQ", 3), ("Chicken Express", 4), ("Starbucks", 5)]
Gracias por adelantado.
En
for i2 in filtenetworkingRestraunts { justStrings.append(filtenetworkingRestraunts[i2].0) }
i2
no es un índice, pero itera sobre los elementos de la matriz, es decir, es una tupla (String, Int)
. Lo que probablemente quise decir es
for i2 in filtenetworkingRestraunts { justStrings.append(i2.0) }
Observaciones adicionales:
La variable
var i2 = 0
no se usa en absoluto, i2
en for-loop es una nueva variable cuyo ámbito está restringido al bucle.
Las variables filtenetworkingRestraunts
y justStrings
no se inicializan, por lo que esto debería ocasionar errores adicionales en el comstackdor.
Ambos loops se pueden replace por un enfoque más funcional usando filter
y map
:
let filtenetworkingRestraunts = restraunts.filter { $0.1 > Int(starSlider.value) } let justStrings = filtenetworkingRestraunts.map { $0.0 }
¿Cuál, por supuesto, podría combinarse para
let justStrings = restraunts.filter { $0.1 > Int(starSlider.value) }.map { $0.0 }