Jupyo's Daily Story
ForEach 본문
본 내용은 'Hacking With Swift' 의 내용을 개인적으로 번역 및 정리한 내용입니다.
원문 : www.hackingwithswift.com/quick-start/swiftui/how-to-create-views-in-a-loop-using-foreach
참고 : kka7.tistory.com/201
How to create views in a loop using ForEach
※ Updated for Xcode 12.0
일반적으로 SwiftUI에서 *시퀀스(Sequence) 를 반복하여 뷰들을 생성하고자 하는 경우, ForEach를 이용합니다.
시퀀스(Sequence)
요소들의 목록.
요소들을 순서대로 하나씩 순회하는 타입을 의미.
무한하거나 유한하며, 한 번만 이터레이트(iterate) 할 수 있는 특징이 있다.
※ ForEach를 보았을 때 간단하게 Swift와 동일한 ForEach() 메소드라고 생각할 수 있지만, 다르다는 것을 보고 이해하셔야 합니다.
SwiftUI에서의 ForEach는 자체적인 뷰 구조체이며, 원하는 경우 직접적으로 뷰 body로 반환할 수 있습니다.
항목의 배열을 제공하고 값이 변경 될 때, 업데이트하는 방법을 알기 위해서 각각의 고유하게 식별할 수 있는 방법을 SwiftUI에게 알려줘야 할 수도 있습니다.
또한, 반복문의 각 항목에 대한 뷰를 생성하기 위해 실행할 클로져를 전달합니다.
예를 들어 간단한 범위 반복문의 경우, ForEach의 내부에 직접 범위를 전달하고, 각각의 숫자를 고유 식별자로 사용하도록 Swift에게 지시 할 수 있습니다.
아래 예시와 같이 10에서 1까지 숫자를 카운트한 다음, 끝에 메시지를 추가합니다.
위의 id(: \.self) 은 SwiftUI가 배열의 각 요소를 고유하게 식별 할 수 있도록하기 위해 필요한 부분입니다.
항목을 추가하거나 삭제 시, 어떤 것을 처리했는지 SwiftUI 가 정확히 알고 있다는 뜻입니다.
이 접근 방식을 통해 모든 타입의 반복문을 만들 수 있습니다.
아래 예시와 같이 3가지의 색상의 배열을 만들고, 이 모든 것을 반복하여, 각각 색상의 이름과 값으로 텍스트 뷰를 만듭니다.
\.self 를 사용해서 각 항목이 자체의 값을 사용해서 고유하게 식별된 것을 Swift에게 알려줍니다.
즉, [1, 2, 3] 이라는 배열을, 각 값을 \.self 로 식별한다는 것은 첫번째는 1, 두번째는 2, 세번째는 3 이라는 식별자를 가지고 있다는 것을 의미합니다.
만약 배열에 커스텀 타입이 있는 경우, 유형에서 고유하게 식별할 수 있는 프로퍼티(Property) 인 id: 를 사용해야합니다.
고유함을 보장하는 의미의 UUID 타입을 가진 id 프로퍼티가 있습니다.
그로 인해, 아래의 예시와 같이 배열을 반복하여 VStack에 텍스트 뷰를 만들기 위한 목적에 사용하기 적합합니다.
ForEach의 id 프로퍼티를 보고 내부의 뷰들을 구별할 수 있음을 SiwftUI에게 알려줍니다.
대안으로, Identifiable 프로토콜을 준수하는 Result 를 만들었을 경우에 id(: \.self) 를 제외한 ForEach() 를 사용할 수 있습니다.
해당 프로토콜을 준수한다는 것은 각 객체를 고유하게 식별하는 id 프로퍼티를 추가한다는 것을 의미합니다.
아래의 예시는 위의 예시와 동일한 결과를 보여줍니다.
'SwiftUI' 카테고리의 다른 글
@EnvironmentObject (0) | 2020.10.14 |
---|---|
Spacing & Spacer (0) | 2020.10.13 |
Image RenderingMode (0) | 2020.10.12 |
프로젝트 생성 및 Text & Stack (0) | 2019.09.29 |
SwiftUI 프로젝트 생성 (0) | 2019.09.15 |