SwiftUI에서 항목에 따라 동적으로 리스트를 생성하고 업데이트 하려면 표시될 데이터는 Identifiable 프로토콜을 따르는 클래스 또는 구조체 내에 포함시켜야 한다. Identifiable 프로토콜은 리스트에서 각 항목을 고유하게 식별하는 데 사용될 수 있는 id라는 프로퍼티가 객체에 있어야한다. id 프로퍼티는 수백 개의 다른 표준 스위프트 타입이나 String, Int, UUID 타입을 포함한 Hashable 프로토콜을 따르는 모든 스위프트 타입이나 커스텀 타입이 id 프로퍼티가 될 수 있다.
SwiftUI에서 Identifiable 프로토콜의 선언부
만약 UUID를 사용하기로 했다면 UUID() 메서드는 각 항목마다 고유한 ID를 자동으로 생성하는 데 사용될 수 있다. 플러터 프레임워크의 UniqueKey 같은 개념인듯. 플러터에서는 위젯 렌더링 시 플러터가 각 항목을 구별하고 식별할 수 있도록 하는 역할을 했다.
예를 들어 Identifiable 프로토콜을 구현한 item 구조체를 다음과 같이 정의했다.
struct item: Identifiable {
var id = UUID()
var name: String
var imageName: String
}
var listData: [item] = [
item(name: "TV", imageName: "tv"),
item(name: "Printer", imageName: "printer.fill"),
item(name: "iPod", imageName: "ipod")
]
struct ContentView: View {
var body: some View {
List(listData) { item in
HStack {
Image(systemName: item.imageName)
Text(item.name)
}
}
}
}
참고 : SwiftUI기반의 iOS프로그래밍, 닐 스미스 저