구조체 간의 @binding 문제

Aug 17 2020

내 코드에는 다음이 있습니다.

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

동일한 google1 이미지를 무시하고 코드를 먼저 작동 시키려고합니다.

그런 다음 검색보기에 다음이 있습니다.

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 specialtyList'의 정보를 scrollView로 표시하려면

표시된 각 세계가 버튼으로 작동하므로 대상 (이 경우 SearchBar ())으로 이동할 때 누른 NavigationLink 텍스트에 따라 다른 정보가 표시되도록하고 싶습니다.

'specialtyList'목록의 순서를 사용하여 어떻게 할 수 있으며 눌린 NavigationLink 텍스트의 동일한 이름을 대상에 간단히 인쇄 할 수 있습니까?

답변

Asperi Aug 17 2020 at 10:42

나는 이것이라고 가정한다

참고 : 유형 (예 : 특수성, 대문자) 및 인스턴스 / 값 (예 : 특수성, 소문자)에 대해 동일한 이름 지정을 피하십시오. 그렇지 않으면 컴파일러와 사용자를 혼동 할 수 있습니다.

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

그리고 지금보기에

struct SearchBar: View {
   let item: Specialty

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

      // .. other code
   }
}