Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Jupyo's Daily Story

ForEach 본문

SwiftUI

ForEach

JangJupyo 2020. 10. 13. 12:06
728x90
반응형

본 내용은 '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 - a free SwiftUI by Example tutorial

Was this page useful? Let us know! 1 2 3 4 5

www.hackingwithswift.com

 

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에 텍스트 뷰를 만들기 위한 목적에 사용하기 적합합니다.

ForEachid 프로퍼티를 보고 내부의 뷰들을 구별할 수 있음을 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