반응형
본 게시글은 애플의 공식문서(https://developer.apple.com/documentation/swiftui/foreach)를 참고하여 작성되었습니다.
ForEach
확인된 데이터의 기본 collection으로부터 계산된 view들을 만들 수 있는 구조체입니다.
- View Builder에는 for문을 적용할 수 없습니다. 대신 ForEach문을 사용합니다.
- 배열을 이용해 새로운 Bag of Views를 만들 수 있습니다.
- 단, collection의 요소는 Identifiable protocol을 채택해야 합니다.
- 배열은 요소들이 계속해서 추가 및 삭제되면서 순서가 바뀔 수 있습니다.
- 따라서 각 요소들이 고유한 identifier가 있어야 해당 요소로 만들어진 View를 확인할 수 있습니다.
- 만약 단순 문자열을 사용하고 싶을 경우, 별다른 고유 id가 없기 때문에 \.self를 통해 구분합니다. 물론 이렇게되면 같은 문자열을 사용한 View는 같은 View로 인식되어 작동하게 됩니다. (수정처리시 동시적용)
- 아래 예시는 ForEach를 통해 View를 생성하는 예시입니다. NamedFont가 Indentifiable를 채택하고 있기 때문에 활용이 가능합니다.
private struct NamedFont: Identifiable {
let name: String
let font: Font
var id: String { name }
}
private let namedFonts: [NamedFont] = [
NamedFont(name: "Large Title", font: .largeTitle),
NamedFont(name: "Title", font: .title),
NamedFont(name: "Headline", font: .headline),
NamedFont(name: "Body", font: .body),
NamedFont(name: "Caption", font: .caption)
]
var body: some View {
ForEach(namedFonts) { namedFont in
Text(namedFont.name)
.font(namedFont.font)
}
}
- 결과
Identifiable
인스턴스가 안정적으로 구분될 수 있는 엔티티 값을 가지도록하는 타입의 클래스입니다.
- Identifiable protocol을 사용하면 클래스 혹은 값 타입에 안정적인 구분개념(ID)을 가지도록 할 수 있습니다. 예를 들어 앱이나 앱의 저장소에서 안정적인 ID 속성을 기반으로 사용자 유형을 정의할 수도 있습니다. 사용자 이름과 같은 다른 데이터 필드가 변경되어도 ID 속성을 기반으로 특정 사용자를 식별할 수 있습니다.
- ID는 다음과 같은 속성을 가집니다.
- UUID와 같이 항상 고유함을 보장합니다.
- 데이터베이스 레코드 키와 같이 각 환경별로 영구적으로 고유합니다.
- object identifier와 같이 개체의 수명 동안 고유합니다.
- 컬렉션 인덱스와 같이 현재 컬렉션 내에서 고유합니다.
반응형
'🍎 Apple > SwiftUI' 카테고리의 다른 글
[SwiftUI] some View의 사용 이유 (0) | 2024.06.23 |
---|---|
[SwiftUI] 관찰 중인 데이터를 변경하는 작업을 MainActor 환경에서 해야하는 이유 (0) | 2023.10.28 |
[SwiftUI] Observable macro를 통해 모델 데이터를 만들고 관리하는 방법 (0) | 2023.10.28 |
[SwiftUI] SwiftUI의 신비를 풀어보자 (Demystify SwiftUI) (2) | 2023.09.16 |
[SwiftUI] Opaque Type, ViewModifier, View Combiner (0) | 2022.03.30 |