yapılar arasında @binding ile ilgili sorunlar

Aug 17 2020

benim kodumda var:

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"))
    ]
}

aynı google1 resimlerini görmezden gelin, sadece kodun önce çalışmasını sağlamaya çalışıyorum.

Ardından, Arama Görünümünde:

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)
            }
        }
    }
}

'let specialityList' içindeki bilgileri bir scrollView olarak göstermek için

Görüntülenen her dünya bir düğme olarak çalıştığından, bunu deniyorum, hedefe gittiğimde (bu durumda bu SearchBar ()), basılan NavigationLink metnine bağlı olarak farklı bilgilerin gösterilmesini istiyorum.

Bunu 'uzmanlıkListesi' listesindeki sırayı kullanarak nasıl yapabilirim ve hedefte basılan NavigationLink metninin aynı adını nasıl basitçe yazdırabilirim?

Yanıtlar

Asperi Aug 17 2020 at 10:42

Sanırım bu o

Not: tür (örneğin, Özel, büyük harfle yazılmış) ve örnek / değer (örneğin, uzmanlık, küçük harf) için aynı isimlendirmeden kaçının, aksi takdirde derleyicinin ve sizin kafanızı karıştırabilir.

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)
            }
        }
    }
}

ve şimdi görüş alanında

struct SearchBar: View {
   let item: Specialty

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

      // .. other code
   }
}