SwiftUI Tutorials의 세번째 자료인 Handling User Input을 진행하였다.
이번에는 저번에 만든 랜드마크 리스트에 Favorite을 표시하는 기능을 추가한다. (Section 1)
제일 먼저 자료의 형식, 요소?를 정리해두는 Landmark 구조체에 Bool 타입인 isFavorite을 추가한다.
그리고 랜드마크 View에 아까 선언한 isFavorite이 true라면 시스템에 내장된 "star.fll" 이미지를 추가하도록 했다.
그러면 옆에 작은 별이 생기는데 별이 검은 색이라 마음에 들지 않는다.
"star.fll"처럼 내장된 이미지는 벡터 기반이기 때문에 수정이 가능하다고 한다.
.foregroundColor(.yellow)로 노란 별로 수정해준다.
Section 2는 Filter 기능의 추가이다.
filter 고차함수를 통해 filteredLandmarks에 isFavorite이 true인 데이터를 받는다.
그리고 View에 있는 List를 filteredLandmarks로 바꾸면 Canvas에 isFavorite이 true 리스트가 표시된다.
섹션3에서는 토글을 추가했다.
기존의 리스트에 showFavoritesOnly가 true일 때 켜지는 토글을 추가했다.
Section 4 ~ 6은 직접 즐겨찾기를 추가하고 추가한 목록이 Favorites Only 항목에 적용되도록 하였다.
FavoriteButton이라는 뷰를 하나 생성하고 다음과 같이 버튼을 설정하였다.
또한 기존 데이터를 리스트로 처리하는 파일에 ObservableObject 프로토콜을 적용하여
버튼을 누르는 시점을 통해 값이 변하는 시점을 관찰하였다.
데이터를 처리하는 과정부터 @State나 @EnvironmentObject 등을 완벽히 이해하지 못하고 진행하였다.
중간중간 이해를 하지못해 아쉬웠지만 모든 과정을 혼자 다시 만들어보며 복습할 계획이다.