반복문으로 생성된 뷰들을 구별하는 방법
List 나 ForEach 를 사용할 경우 각 요소를 어떻게 구분할 지 지정해주어야 한다.
즉 Unique Identifier 를 지정해 주어야 한다.
이는 두가지 방식으로 가능하다.
1. Key Path
직접 id 를 지정하는 방식이다.
List(landmarkData, id: \.id) { landmark in
LandmarkRow(landmark: landmark)
}
struct Landmark {
var id: Int
var name: String fileprivate
var imageName: String fileprivate
var coordinates: Coordinates
var state: String
var park: String
var category: Category
}
출처: https://yeonduing.tistory.com/40 [yeonduing]
Swift
복사
이처럼 리스트 함수 자체에 아이디를 넘겨 줄 수 있다.
이때 id 가 아니라 name 같은 아무 프로퍼티를 사용해도 되지만 꼭 유일한 식별자를 지정해주어야한다.
UUID() 를 사용하면 매번 객체가 생성될 때 유일한 식별자를 자동으로 생성해준다.
2. Identifiable Protocol
Identifiable 프로토콜을 채택하면 Key Path 를 따로 넘겨주지 않아도 된다.
List(landmarkData) { landmark in
LandmarkRow(landmark: landmark)
}
struct Landmark: Identifiable {
let id = UUID()
var name: String fileprivate
var imageName: String fileprivate
var coordinates: Coordinates
var state: String
var park: String
var category: Category
}
Swift
복사
즉 스트럭트에 id 프로퍼티가 존재하면