728x90
북마크와 메뉴를 볼 기본 캠퍼스에 대한 데이터를 앱 내에서 저장할 수 있도록 합니다.
원래는 Core Data를 사용하려고 했으나, 데이터의 양이 많지 않고 가짓수도 적어서 Core Data 대신 조금 느려도 사용이 간편한 UserDefaults를 사용했습니다.
<View Model>
func saveDefaultCampus() {
UserDefaults.standard.setValue(defaultCampus, forKey: "defaultCampus")
}
func saveBookmark() {
UserDefaults.standard.setValue(bookmark, forKey: "bookmark")
}
func loadDefaultCampus() {
guard let defaultCampus = UserDefaults.standard.string(forKey: "defaultCampus") else {
self.defaultCampus = "부산"
selectedCampus = "부산"
requestCampusDatabase()
return
}
self.defaultCampus = defaultCampus
selectedCampus = defaultCampus
requestCampusDatabase()
}
func loadBookmark() {
guard let bookmark = UserDefaults.standard.stringArray(forKey: "bookmark") else {
self.bookmark = []
return
}
self.bookmark = bookmark
}
북마크, 기본 캠퍼스를 저장, 로드 하는 함수입니다.
뷰 모델 내에 위치합니다.
<View>
var body: some View {
// ...
.sheet(isPresented: $vm.isSheetShow) {
Sheet(defaultCampus: $vm.defaultCampus)
.onChange(of: vm.defaultCampus) { _, newValue in
vm.saveDefaultCampus()
}
}
// ...
}
private var menu: some View {
// ...
ScrollView {
if let selectedWeekday = Week(rawValue: vm.selectedDay) {
ForEach(vm.restaurantByBookmark(), id: \\.rawValue) {
if let restaurant = vm.menu[selectedWeekday]![$0] {
MenuView(bookmark: $vm.bookmark, restaurant: $0.rawValue, meal: restaurant)
}
}
.onChange(of: vm.bookmark) { _, newValue in
vm.saveBookmark()
}
}
}
// ...
}
뷰 내에서는 onChange를 통해서 뷰 모델의 북마크, 기본 캠퍼스가 변경되면 데이터를 저장하도록 구현했습니다.
<분류 함수>
func restaurantByBookmark() -> [Restaurant] {
let bookmarkRestaurant = bookmark.map {
Restaurant(rawValue: $0)!
}
let campusRestaurant = Campus(rawValue: selectedCampus)!.restaurant.filter {
!bookmarkRestaurant.contains($0)
}
return bookmarkRestaurant + campusRestaurant
}
기존 allCases를 사용해 식당 목록을 보여주던 것을 북마크된 식당을 먼저 보여주기 위해 분류 함수를 추가했습니다.
<화면 스크린샷>
북마크한 식당이 가장 상위에 위치한 모습입니다.
728x90
'Project > 뿌대식: 부산대학교 학식 알리미' 카테고리의 다른 글
뿌대식: 앱스토어 - 심사 사전 준비 (0) | 2024.01.11 |
---|---|
뿌대식: 앱스토어 - 프로젝트 설정 (0) | 2024.01.11 |
뿌대식: 개발 - 시트 (1) | 2024.01.10 |
뿌대식: 개발 - MVVM (1) | 2024.01.10 |
뿌대식: 개발 - 통신 (0) | 2024.01.09 |