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.

Swift: Múltiples variables en la declaración ForEach.

Aquí está mi código, y me pregunto cómo puedo permitir que los 4 arrays se utilicen en el bucle ForEach, ya que actualmente solo puedo usar 2.

struct ContentView: View {
    var array1 = ["1", "2", "3"]
    var array2 = ["a", "b", "c"]
    var array3 = ["!", "@", "#"]
    var array4 = ["+", "-", "~"]

    var body: some View {
        VStack {
            HStack {
                Text("Upcoming Flights")
                    .font(.title2)
                    .fontWeight(.bold)
                Spacer()
            }

            ScrollView(.horizontal) {
                HStack {
                    ForEach(Array(zip(array1, array2)), id: \.0) { item in
                        VStack {
                            Group {
                                Text("Flight")
                                Text(item.0)
                                    .padding(.bottom)
                                    .font(.caption)
                                    .foregroundColor(.gray)
                                Text("Instructor")
                                Text(item.1)
                                    .font(.caption)
                                    .foregroundColor(.gray)
                            }
                        }
                        .frame(width: 110, height: 140)
                        .overlay {
                            RoundedRectangle(cornerRadius: 10)
                                .stroke(Color.gray.opacity(0.3), lineWidth: 1)
                        }
                        Spacer()
                    }

                    ForEach(Array(zip(array3, array4)), id: \.0) { item in
                        VStack {
                            Group {
                                Text("Other")
                                Text(item.0)
                                    .padding(.bottom)
                                    .font(.caption)
                                    .foregroundColor(.gray)
                                Text("Symbol")
                                Text(item.1)
                                    .font(.caption)
                                    .foregroundColor(.gray)
                            }
                        }
                        .frame(width: 110, height: 140)
                        .overlay {
                            RoundedRectangle(cornerRadius: 10)
                                .stroke(Color.gray.opacity(0.3), lineWidth: 1)
                        }
                        Spacer()
                    }
                }
                .frame(height: 200)
            }
            .frame(height: 200)
            .offset(y: -25)
        }
        .offset(y: -10)
        .padding([.leading, .trailing, .bottom])
    }
}

Gracias de antemano. @jnpdx Espero que esto ayude, y me aseguré de que fuera reproducible. No quiero que los arrays se combinen, sino que se muestren como Text en la misma Stack en la vista.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para permitir que los 4 arrays se utilicen en la declaración ForEach, puedes usar el método zip para combinar los 4 arrays en un único Array de tuplas, y luego iterar sobre ellos con la declaración ForEach. Aquí tienes un ejemplo:

    ForEach(Array(zip(zip(array1, array2), zip(array3, array4)))), id: \.0.0) { item in
        VStack {
            Group {
                Text("Vuelo")
                Text(item.0.0)
                    .padding(.bottom)
                    .font(.caption)
                    .foregroundColor(.gray)
                Text("Instructor")
                Text(item.0.1)
                    .font(.caption)
                    .foregroundColor(.gray)
                Text("Símbolo")
                Text(item.1.0)
                    .font(.caption)
                    .foregroundColor(.gray)
                Text("Operador")
                Text(item.1.1)
                    .font(.caption)
                    .foregroundColor(.gray)
            }
        }
        .frame(width: 110, height: 140)
        .overlay {
            RoundedRectangle(cornerRadius: 10)
                .stroke(.gray.opacity(0.3), lineWidth: 1)
        }
        Spacer()
    }
    

    En este ejemplo, estamos usando zip dos veces para combinar los 4 arrays en un único array de tuplas con cuatro elementos. El zip exterior combina los dos primeros arrays en una tupla, y el zip interior combina los dos últimos arrays en otra tupla. Luego iteramos sobre este array de tuplas con ForEach y hacemos referencia a cada elemento de las tuplas con la variable item.

    ¡Espero que esto te ayude! Si tienes alguna otra pregunta, avísame.

Comments are closed.