SwiftUI : List, ForEach, Identifiable

버들비·2020년 8월 30일
1

SwiftUI

목록 보기
5/8
post-custom-banner

List

여러개의 행을 표현하기 위한 뷰.

List 로 정적 컨텐츠 표현하기

List {
	Text("hello")
	Text("world")
}

뷰 빌더의 제약때문에, 정적 컨텐츠 표현시 중괄호 {} 안에 10개 넘는 뷰를 집어넣으면 에러가 뜬다.

List로 동적 컨텐츠 표현하기

List(0..<20) { index in
	Text("\(index)")
}

이때 List() 안에 들어갈 수 있는 범위 연산자는 Half Open Range 만 들어갈 수 있다.

또는 RandomAccessCollection 프로토콜을 준수하는 데이터를 집어넣을 수도 있다. 이 경우 각 요소들을 식별할 수 있도록 id 값을 제공해야 한다.

  • List() 안에 id 값을 넣어주기
  • 데이터가 Identifiable 프로토콜을 준수하게 만들기

List() 안에 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 프로토콜 채택

데이터가 Identifiable 프로토콜을 채택하게 하여 유니크한 id 값을 가지게 만든다.

struct SomeData: Identifiable {
	let id = UUID()
    ...
}

List([SomeData(someArgument1), SomeData(someArgument2)]) { ... } // 데이터가 Identifiable을 준수하며 독자적인 id 가 있으므로 List() 에서 id 를 생략할 수 있다.

ForEach

동적 컨텐츠를 반복적으로 표현하기 위한 뷰.
동적 컨텐츠는 List 처럼 id 값을 넣어줘야 한다.

post-custom-banner

0개의 댓글