es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La matriz Swift parece no estar agregando elementos correctamente.

Esta pregunta es bastante elemental, pero soy principiante en Swift y agradecería cualquier ayuda. Estoy construyendo una aplicación donde, cuando el usuario presiona un botón desde la página del menú, se añade un elemento al array, agregando el nombre del artículo que el usuario agregó a su carrito. La página del carrito debe mostrar lo que hay en el array en un campo de texto o etiqueta, pero parece que los arrays no se están agregando. He comparado esta aplicación con una aplicación anterior que funcionaba de manera similar y no puedo encontrar una razón por la cual esta no esté funcionando.

He intentado añadir elementos al final del array, añadir elementos en la posición 0 del array, usar diccionarios, he creado clases separadas, no estoy seguro de qué más intentar. También he intentado añadir con sólo una cadena (mostrado en la función “tropTwistButtonPushed”) y añadir utilizando el texto de una etiqueta (mostrado en las otras funciones “button pushed”).

// arrays //
var smoothieNames: [String] = []
var smoothiePrices: [Double] = []

@IBAction func tropTwistButtonPushed(_ sender: Any) {
// añadir elementos a los arrays
smoothieNames.append(“Tropical Twist”)
smoothiePrices.append(4.00)
}

@IBAction func berryButtonPushed(_ sender: Any) {
smoothieNames.append(berryYummyLabel.text ?? “”)
smoothiePrices.append(3.00)
}

@IBAction func chiliMangoButtonPushed(_ sender: Any) {
smoothieNames.append(chiliMangoLabel.text ?? “”)
smoothiePrices.append(4.00)
}

@IBAction func pbNanaButtonPushed(_ sender: Any) {
smoothieNames.append(pbNanaLabel.text ?? “”)
smoothiePrices.append(3.00)
}

En una clase y controlador de vista separados:

@IBAction func refreshButtonTapped(_ sender: Any) {
for smoothie in smoothieNames {
smoothieNamesTextView.text += “(smoothie) \n”
}
}

Captura de pantalla: enlace

Captura de pantalla: enlace

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Un problema potencial en el código proporcionado es que los métodos de añadir elementos al array no se están llamando dentro de un bloque DispatchQueue.main. Las actualizaciones de la interfaz de usuario siempre deben ocurrir en el hilo principal. Aquí tienes una versión actualizada del código con la solución:

    @IBAction func tropTwistButtonPushed(_ sender: Any) {
        DispatchQueue.main.async {
            // añadir elementos a los arrays
            smoothieNames.append("Tropical Twist")
            smoothiePrices.append(4.00)
        }
    }
    
    @IBAction func berryButtonPushed(_ sender: Any) {
        DispatchQueue.main.async {
            smoothieNames.append(berryYummyLabel.text ?? "")
            smoothiePrices.append(3.00)
        }
    }
    
    @IBAction func chiliMangoButtonPushed(_ sender: Any) {
        DispatchQueue.main.async {
            smoothieNames.append(chiliMangoLabel.text ?? "")
            smoothiePrices.append(4.00)
        }
    }
    
    @IBAction func pbNanaButtonPushed(_ sender: Any) {
        DispatchQueue.main.async {
            smoothieNames.append(pbNanaLabel.text ?? "")
            smoothiePrices.append(3.00)
        }
    }
    

    Además, sería útil ver cómo se configura smoothieNamesTextView para diagnosticar aún más el problema.

Comments are closed.