problemas con @binding entre estructuras

Aug 17 2020

en mi código tengo:

struct Specialty {
    let type:String
    let color:Color
    let image:Image
}

// MARK: Search
struct Search: View {
   
    @State var show = false
    @State var txt = ""
    @State  var index = 1
    let specialtyList = [
        Specialty(type: "Cardiologia", color: Color.blue, image: Image("google1") ),
        Specialty(type: "Clínica Médica", color: Color.pink, image: Image("google1")),
        Specialty(type: "Dermatologia", color: Color("Color"), image: Image("google1")),
        Specialty(type: "Ginecologia e Obstetrícia", color: Color.pink, image: Image("google1")),
        Specialty(type: "Medicina do Trabalho", color: Color.red, image: Image("google1")),
        Specialty(type: "Oftalmologia", color: Color("Color"), image: Image("google1")),
        Specialty(type: "Ortopedia", color: Color.pink, image: Image("google1")),
        Specialty(type: "Otorrinolaringologia", color: Color.blue, image: Image("google1")),
        Specialty(type: "Pediatria", color: Color.red, image: Image("google1")),
        Specialty(type: "Psiquiatria", color: Color("Color"), image: Image("google1")),
        Specialty(type: "Radiologia", color: Color("Color"), image: Image("google1"))
    ]
}

ignore las mismas imágenes de google1, solo estoy tratando de que el código funcione primero.

Luego, en la Vista de búsqueda, tengo:

ForEach(specialtyList, id: \.type){ Specialty in
    NavigationLink (destination: SearchBar()){
        VStack(spacing: 18) {
            HStack{
                Text(Specialty.type).foregroundColor(.white)
                Specialty.image
                    .renderingMode(.original)
                    .resizable()
                    .frame(width: 35, height: 35)
            }
        }
    }
}

para mostrar la información en 'dejar specialityList' como un scrollView

Como cada mundo mostrado funciona como un botón, estoy intentando que, cuando vaya al destino (que es SearchBar () en este caso), quiero que se muestre información diferente según el texto de NavigationLink que se presione.

¿Cómo podría hacerlo usando el orden en la lista 'SpecialtyList' y cómo podría simplemente imprimir, en el destino, el mismo nombre del texto de NavigationLink que se presionó?

Respuestas

Asperi Aug 17 2020 at 10:42

Supongo que esto es todo

Nota: intente evitar el mismo nombre para el tipo (como, especialidad, en mayúsculas) y la instancia / valor (como, especialidad, en minúsculas), de lo contrario, podría confundir al compilador y a usted.

ForEach(specialtyList, id: \.type){ specialty in   // << named correctly
    NavigationLink (destination: SearchBar(item: specialty)){  //  << inject here
        VStack(spacing: 18) {
            HStack{
                Text(specialty.type).foregroundColor(.white)
                specialty.image
                    .renderingMode(.original)
                    .resizable()
                    .frame(width: 35, height: 35)
            }
        }
    }
}

y ahora a la vista

struct SearchBar: View {
   let item: Specialty

   var body: some View {
      Text(item.type)

      // .. other code
   }
}