Skip to content

20201202 개발 진행 상황

songju edited this page Dec 2, 2020 · 3 revisions

여행 삭제 alert 텍스트 색 변경

  • 애플 가이드라인에 따라 삭제 시 확인을 빨간색, 취소를 파란색으로 수정

countries setUp 과정 sceneDelegate -> PersistenceManager 위임

  • SceneDeleagate에서 하던 앱 초기실행 시 국가 정보 저장 로직 persistenceManager로 이동
  • 이에 따라 SceneDelegate에서 FlagKit import 제거
  • createCountriesWithAPIRequest 함수는 비동기 처리
  • filterCountries 함수: decoding된 데이터 전체를 보내던 기존의 구조에서 환율 정보 딕셔너리만 보내도록 수정
  • 관련 테스트코드 작성

Travel 테스트 코드 개선

  • country, countryProvider를 삭제하여 Travel 테스트에만 집중하도록 코드 간소화
  • Travel 생성/수정/삭제에 필수적인 Country 생성 작업은 persistenceManager에서 하도록 로직 변경
  • 해당 로직이 비동기이므로 expectation, wait 추가
  • TravelViewModelTests : TravelProvider 테스트 코드 개선과 내용은 동일함

지출, 수입 관련(History) 엔티티 설계, CRUD 기능 구현

  • 지출과 수입을 나누지 않고 하나의 엔티티 History로 관리하기로 함
  • History 엔티티는 Travel 엔티티와 일대다의 관계를 갖음
  • TravelItemViewModel이 HistoryItemViewModel 배열을 소유하도록 구현
    • 따라서 TravelItemViewModelTravelItemPresentable, HistoryListPresentable 프로토콜을 채택하게 됨
  • TravelItemViewModelHistoryProvider를 SceneDelegate -> TravelListViewModel을 거쳐 주입받음

지출 목록 화면 메인 TableView

HistoryCell 구현

  • HistoryCell 화면 요소 추가 및 IBOutlet 연결
  • assets에 카테고리 별 아이콘 추가

    무료 아이콘 받아서 진행

  • HistoryItemViewModel 타입을 인자로 받은 configure 함수 구현 (현재는 임시로 DummyHistory 사용)
    • 금액 부분은 Double 타입을 extension하여 세자리수 단위로 콤마 추가

지출 목록 메인 TableView datasource 구현

  • 실제 사용될 HistoryItemViewModel 중, cell에 표현될 항목만 가져다 dummyData 생성
struct DummyHistory: Hashable {
    var category: HistoryCategory
    var title: String
    var amount: Double
    var date: Date
}

지출 목록 tableView Header 모델 구현

  • 여행 날짜에 종속적인 헤더 모델을 구현해야 하므로 열거형 대신 구조체 활용 레퍼런스 문제로 클래스로 변경
class HistoryListSectionHeader: Hashable {
    static func == (lhs: HistoryListSectionHeader, rhs: HistoryListSectionHeader) -> Bool {
        return lhs.dayNumber == rhs.dayNumber
    }
    
    func hash(into hasher: inout Hasher) {
        hasher.combine(dayNumber)
    }
    var dayNumber: Int?
    var date: Date
    var amount: Double

    init(dayNumber: Int?, date: Date, amount: Double) {
        self.dayNumber = dayNumber
        self.date = date
        self.amount = amount
    }
}
  • applySnapshot 구현부에서 섹션을 구분하여 item 추가 : setupSection 메소드
    • item을 순회하면서 섹션 set에 날짜가 존재하면 총 금액만 추가해주고 존재하지 않으면 새롭게 헤더 추가
    • 추가된 섹션 set을 배열로 바꾸고 날짜를 기준으로 정렬(선택사항) 및 리턴

지출 목록 tableView Header cell 구현

  • UITableHeaderFooterView 타입의 HistoryHeaderCell 파일과 xib 생성
  • 여행 날짜 및 총 금액을 configure하는 메소드 구현 -UITableViewDelegate를 채택하여 헤더 set하는 메소드 정의
  • applySnapshot 이전에 아래 메소드가 호출되므로 전역 변수로 헤더 배열 선언
    • 추후에 applySnapshot 메소드 내부에서 setupSections 하는 부분 수정해야함
private lazy var headers = setupSection(with: dummyViewModel)

...

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    guard let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: HistoryHeaderCell.identifier) as? HistoryHeaderCell else { return UIView() }
    headerView.configure(with: headers[section].dayNumber, date: headers[section].date, amount: headers[section].amount)     
    return headerView
    }

BoostPocket 🏖

🤝 규칙
🔖 프로젝트 상세
📝 회의
🏃 1주차 데일리스크럼
🏃 2주차 데일리스크럼
🏃 3주차 데일리스크럼
🏃 4주차 데일리스크럼
🏃 5주차 데일리스크럼
👨‍👨‍👧‍👦 피어세션
🗣 팀 회고

📱 개발 진행 상황
🧐 학습
❓ Trouble Shooting
Clone this wiki locally