- SwiftUI의 ForEach는 배열 같은 컬렉션을 반복하며 VIew를 만들어주는 구조체.
- Swift의 for-in 반복문이랑 비슷하지만, 반드시 뷰를 리턴해야 하고, 각 뷰가 고유하게 식별될 수 있어야 한다.
ForEach(컬렉션, id: 어떤 값) { element in // element를 이용해 View 생성 } names, id: .\self
여기서 id: .self는 식별자(ID)를 어떻게 정할 건지 SwiftUI에게 알려주는 것.
왜 필요하냐? SwiftUI는 화면을 그릴 때 뷰를 통째로 새로 만드는 게 아니라, "변경된 부분만 업데이트"하기 때문이다. 그러려면 각 뷰가 고유하게 구분될 수 있는 ID가 필요하다.
Id: .self 의미
- .self는 배열 원소 자기 자신을 ID로 쓰겠다는 뜻
- names가 ["James", "Alice", "Bob"] 이면, ID도 "James"
- 즉, 문자열 자체가 뷰의 식별자가 된다.
정리
- ForEach는 배열 같은 걸 반복해서 뷰를 만드는 구조체
- SwiftUI는 뷰 업데이트를 위해 각 뷰의 고유 ID 필요
- 단순 문자열/숫자 배열 -> id: .self
- 커스텀 모델 -> Identifiable 프로토콜 채택해서 id 제공