diff --git a/Happiggy-bank/Happiggy-bank/HomeTab/Home/UI/Controller/HomeTabViewController.swift b/Happiggy-bank/Happiggy-bank/HomeTab/Home/UI/Controller/HomeTabViewController.swift index 7b55fa7c..0adc3fb7 100644 --- a/Happiggy-bank/Happiggy-bank/HomeTab/Home/UI/Controller/HomeTabViewController.swift +++ b/Happiggy-bank/Happiggy-bank/HomeTab/Home/UI/Controller/HomeTabViewController.swift @@ -93,9 +93,10 @@ final class HomeTabViewController: UIViewController { if bottle.isEmtpyToday { // NewNoteInputViewController - let viewModel = NewNoteInputViewModel(date: Date(), bottle: bottle) self.navigationController?.pushViewControllerWithFade( - to: NewNoteInputViewController(viewModel: viewModel) + to: NewNoteInputViewController( + viewModel: .init(newNote: .init(date: Date(), bottle: bottle)) + ) ) } else { // NewNoteDatePickerViewController diff --git a/Happiggy-bank/Happiggy-bank/HomeTab/Home/UI/Controller/HomeViewController.swift b/Happiggy-bank/Happiggy-bank/HomeTab/Home/UI/Controller/HomeViewController.swift index c16d3b4f..687cc5f3 100644 --- a/Happiggy-bank/Happiggy-bank/HomeTab/Home/UI/Controller/HomeViewController.swift +++ b/Happiggy-bank/Happiggy-bank/HomeTab/Home/UI/Controller/HomeViewController.swift @@ -186,7 +186,7 @@ final class HomeViewController: UIViewController { let bottle = self.viewModel.bottle else { return } - let viewModel = NewNoteDatePickerViewModel(initialDate: Date(), bottle: bottle) + let viewModel = NewNoteDatePickerViewModel(newNote: .init(date: Date(), bottle: bottle)) dateViewController.viewModel = viewModel } diff --git a/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/Model/NewNote.swift b/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/Model/NewNote.swift index bb1bd7e0..54bcbf32 100644 --- a/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/Model/NewNote.swift +++ b/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/Model/NewNote.swift @@ -8,7 +8,9 @@ import Foundation /// 새 쪽지를 추가할 때 사용하는 모델 -struct NewNote: Equatable { +final class NewNote { + + // MARK: - Properties /// 고유 아이디 let id = UUID() @@ -24,4 +26,20 @@ struct NewNote: Equatable { /// 이미지 아이디 var imageID: String? + + + // MARK: - Init(s) + + init(date: Date, bottle: Bottle) { + self.date = date + self.bottle = bottle + } +} + + +// MARK: - Equtable +extension NewNote: Equatable { + static func == (lhs: NewNote, rhs: NewNote) -> Bool { + lhs.id == rhs.id + } } diff --git a/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/UI/Controller/NewNoteDatePickerViewController.swift b/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/UI/Controller/NewNoteDatePickerViewController.swift index 41f0efaa..59da6edc 100644 --- a/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/UI/Controller/NewNoteDatePickerViewController.swift +++ b/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/UI/Controller/NewNoteDatePickerViewController.swift @@ -195,11 +195,7 @@ final class NewNoteDatePickerViewController: UIViewController { guard let rowView = pickerView.view(forRow: row, forComponent: component) as? NewNoteDatePickerRowView else { return } - - rowView.dateLabel.attributedText = self.viewModel.attributedDateString( - for: noteData, - isSelected: true - ) + } /// 이전 상태와 같게 틴트 컬러 및 경고 라벨 상태 복구 @@ -212,13 +208,7 @@ final class NewNoteDatePickerViewController: UIViewController { forComponent: .zero ) as? NewNoteDatePickerRowView else { return } - - /// 선택 가능하면 틴트컬러 적용 - rowView.dateLabel.attributedText = self.viewModel.attributedDateString( - for: noteDatePickerData, - isSelected: true - ) - + guard noteDatePickerData.color != nil else { return } @@ -271,7 +261,6 @@ extension NewNoteDatePickerViewController: UIPickerViewDelegate { let rowView = view as? NewNoteDatePickerRowView ?? NewNoteDatePickerRowView() /// 데이터에 맞게 행의 모습(날짜 라벨 텍스트와 쪽지 이미지 색깔) 업데이트 - rowView.dateLabel.attributedText = self.viewModel.attributedDateString(for: noteData) rowView.noteImageView.image = self.viewModel.image(for: noteData) return rowView diff --git a/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/ViewModel/NewNoteDatePickerViewModel.swift b/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/ViewModel/NewNoteDatePickerViewModel.swift index 2b650e7a..8b3e233a 100644 --- a/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/ViewModel/NewNoteDatePickerViewModel.swift +++ b/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/ViewModel/NewNoteDatePickerViewModel.swift @@ -11,17 +11,24 @@ import UIKit final class NewNoteDatePickerViewModel { // MARK: - Properties - + + let newNote: NewNote + + /// 오늘 날짜 혹은 이전에 선택한 날짜에 해당하는 행 위치를 리턴 + let initialRow: Int + + /// 날짜 피커 전체 행 개수 + let numberOfRows: Int + /// 선택한 날짜 - var selectedDate: Date! - - /// 쪽지를 넣을 저금통: 보틀 뷰 컨트롤러에서 주입받음 - private(set) var bottle: Bottle! + /// + /// 피커를 스크롤만 하고 체크 버튼으로 확정하지 않는 경우를 분리하기 위해 별도로 선언 + var selectedDate: Date /// 날짜 피커에 나타낼 데이터 소스 : 시작일부터의 오늘까지의 모든 날짜와, 해당 날짜에 쪽지를 이미 썼으면 컬러가 없으면 nil이 담겨있음 private(set) lazy var noteData: [NoteDatePickerData] = { var source = [NoteDatePickerData]() - let startDate = self.bottle.startDate + let startDate = self.newNote.bottle.startDate /// 날짜 먼저 전부 기록 for value in .zero.. NSMutableAttributedString { - - let color = isSelected && (source.color == nil) ? UIColor.customTint : .label - - return source.date - .customFormatted(type: .spaceAndDotWithDayOfWeek) - .nsMutableAttributedStringify() - .color(color: color) - .bold(targetString: source.date.monthDotDayWithDayOfWeekString) - } - /// 쪽지 에셋 이미지 리턴 func image(for noteData: NoteDatePickerData) -> UIImage? { guard let color = noteData.color - else { return nil} + else { return nil } - return .note(color: color) + return AssetImage.note(ofColor: color) } /// 선택한 행의 날짜에 쪽지를 쓸 수 있는 지 리턴 func selectedDateIsAvailable(for row: Int) -> Bool { - noteData[row].color == nil + guard noteData.indices ~= row + else { + return false + } + + return noteData[row].color == nil } } diff --git a/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/ViewModel/NewNoteInputViewModel.swift b/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/ViewModel/NewNoteInputViewModel.swift index 7ff32845..ec084331 100644 --- a/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/ViewModel/NewNoteInputViewModel.swift +++ b/Happiggy-bank/Happiggy-bank/HomeTab/NewNote/ViewModel/NewNoteInputViewModel.swift @@ -14,7 +14,7 @@ final class NewNoteInputViewModel { /// 이미지 처리 객체 /// 임시 쪽지 객체 - var newNote: NewNote + let newNote: NewNote /// 배경 색상 var backgroundColor: UIColor? { AssetColor.noteBG(for: self.newNote.color) } @@ -34,8 +34,8 @@ final class NewNoteInputViewModel { // MARK: - Inits - init(date: Date, bottle: Bottle) { - self.newNote = NewNote(date: date, bottle: bottle) + init(newNote: NewNote) { + self.newNote = newNote }