Static View vs. Dynamic View
Static View 는 SwiftUI 의 View 컴포넌트들을 하드 코드 해서 만드는 View 를 말한다. VStack 안에 TextField, Button 등을 작성한 View 를 예로 들 수 있다.
Dynamic View 는 List 혹은 ForEach 를 통해 다수의 View 를 만드는 방식이다. View 를 추가, 제거 시에 몇 번째 View 에 생긴 변화인지 파악해야 하므로 각각을 구별할 수 있는 식별자(identifier) 가 필요하다.
식별자란 유일하게 혼자만 가지는 정보로, 하나의 식별자에 대해 하나의 대상만 존재하기 때문에 이를 통해 어떤 Item(View) 인지 파악할 수 있다.
Identifiable protocol
Identifiable protocol 을 채택하는 타입은 id 라는 이름의 프로퍼티를 가져야한다. Class 를 사용하는 경우에는 미리 구현되어 있어 채택하기만 하면 된다.
id 프로퍼티는 식별자로서의 값을 가져야 한다. 즉, 유일한 값이어야 한다. 이를 채택한 타입은 id 라는 식별자를 가짐을 뜻하므로 ForEach 사용시 인자로 식별자를 명시하지 않아도 된다.
UUID
Universally Unique Identifier 의 약자로 16 진수로 이루어진 긴 문자열이다. 이미 만들어진 UUID 와 동일한 문자열을 만들어 내는 것은 현생에서 불가능에 가깝기 때문에 식별자로서의 의미를 가질 수 있다.
Dynamic View 생성
ForEach 구문을 통해 ExpenseItem 타입의 배열에 대한 Dynamic View 를 생성한다. ForEach의 id인자에 ExpenseItem 타입의 멤버 id 를 명시해야 한다.
struct ExpenseItem {
let id = UUID()
let name: String
let type: String
let amount: Int
}
var expenses = [ExpenseItem]()
ForEach(expenses, id: \.id) { item in
Text(item.name)
}
Identifiable 을 채택하여 Dynamic View 생성
이미 유일한 식별자인 id 프로퍼티를 선언한 상태이므로 Identifiable 을 채택하기만 하면 된다. ForEach 구문에서 식별자를 명시하지 않아도 된다.
struct ExpenseItem: Identifiable {
let id = UUID()
let name: String
let type: String
let amount: Int
}
var expenses = [ExpenseItem]()
ForEach(expenses) { item in
Text(item.name)
}
'iOS 개발 > SwiftUI' 카테고리의 다른 글
[iOS/SwiftUI] Alignment Guides, Custom Alignment (0) | 2021.05.13 |
---|---|
[iOS/SwiftUI] Lazy Stacks (0) | 2021.05.12 |
[iOS/SwiftUI] 기초적인 Navigation 구현하기 (0) | 2021.04.21 |
[iOS/SwiftUI] State & Binding (0) | 2021.04.14 |