여러개의 행을 표현하기 위한 뷰.
List {
Text("hello")
Text("world")
}
뷰 빌더의 제약때문에, 정적 컨텐츠 표현시 중괄호 {} 안에 10개 넘는 뷰를 집어넣으면 에러가 뜬다.
List(0..<20) { index in
Text("\(index)")
}
이때 List() 안에 들어갈 수 있는 범위 연산자는 Half Open Range 만 들어갈 수 있다.
또는 RandomAccessCollection 프로토콜을 준수하는 데이터를 집어넣을 수도 있다. 이 경우 각 요소들을 식별할 수 있도록 id 값을 제공해야 한다.
List(["a","b","c"], id: \.hashValue) { element in
Text("\(element)")
}
List(["a","b","c"], id: \.self) { element in
Text("\(element)")
}
id 매개변수는 Hashable 프로토콜을 준수하는 프로퍼티를 지정할 수 있으며, 데이터 타입 자체가 Hashable 프로토콜을 준수한다면 self라고 입력할 수 있다. 이 경우 식별자로 해시값이 사용된다. Swift 기본 타입들은 대부분 Hashable 하므로, self 로 지정하는게 일반적이다.
직접 만든 커스텀 타입의 경우 Hashable 프로토콜을 준수하게 만들어야 한다.
데이터가 Identifiable 프로토콜을 채택하게 하여 유니크한 id 값을 가지게 만든다.
struct SomeData: Identifiable {
let id = UUID()
...
}
List([SomeData(someArgument1), SomeData(someArgument2)]) { ... } // 데이터가 Identifiable을 준수하며 독자적인 id 가 있으므로 List() 에서 id 를 생략할 수 있다.
동적 컨텐츠를 반복적으로 표현하기 위한 뷰.
동적 컨텐츠는 List 처럼 id 값을 넣어줘야 한다.