masalah dengan @binding antara struct

Aug 17 2020

dalam kode saya, saya memiliki:

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

abaikan gambar google1 yang sama, saya hanya mencoba agar kodenya berfungsi terlebih dahulu.

Kemudian, di Tampilan Penelusuran, saya memiliki:

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

untuk menampilkan informasi di 'let specialtyList' sebagai scrollView

Karena setiap dunia yang ditampilkan berfungsi sebagai tombol, saya mencoba itu, ketika saya pergi ke tujuan (yang SearchBar () dalam hal ini), saya ingin menampilkan informasi berbeda tergantung pada teks NavigationLink yang ditekan.

Bagaimana saya bisa melakukannya dengan menggunakan urutan dalam daftar 'daftar khusus' dan bagaimana saya bisa dengan mudah mencetak, di tujuan, nama yang sama dari teks Tautan Navigasi yang ditekan?

Jawaban

Asperi Aug 17 2020 at 10:42

Saya berasumsi ini dia

Catatan: cobalah untuk menghindari penamaan yang sama untuk tipe (seperti, Spesialisasi, huruf kapital) dan instance / nilai (seperti, spesialitas, huruf kecil), jika tidak maka akan membingungkan dan kompilator dan Anda.

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

dan sekarang terlihat

struct SearchBar: View {
   let item: Specialty

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

      // .. other code
   }
}