-
Notifications
You must be signed in to change notification settings - Fork 5
20201202 개발 진행 상황
songju edited this page Dec 2, 2020
·
3 revisions
- 애플 가이드라인에 따라 삭제 시 확인을 빨간색, 취소를 파란색으로 수정
- SceneDeleagate에서 하던 앱 초기실행 시 국가 정보 저장 로직
persistenceManager
로 이동 - 이에 따라 SceneDelegate에서 FlagKit
import 제거
-
createCountriesWithAPIRequest
함수는 비동기 처리 - filterCountries 함수: decoding된 데이터 전체를 보내던 기존의 구조에서 환율 정보 딕셔너리만 보내도록 수정
- 관련 테스트코드 작성
- country, countryProvider를 삭제하여 Travel 테스트에만 집중하도록 코드 간소화
- Travel 생성/수정/삭제에 필수적인 Country 생성 작업은 persistenceManager에서 하도록 로직 변경
- 해당 로직이 비동기이므로 expectation, wait 추가
- TravelViewModelTests : TravelProvider 테스트 코드 개선과 내용은 동일함
- 지출과 수입을 나누지 않고 하나의 엔티티
History
로 관리하기로 함 - History 엔티티는 Travel 엔티티와 일대다의 관계를 갖음
-
TravelItemViewModel이
HistoryItemViewModel 배열을 소유하도록 구현- 따라서 TravelItemViewModel은
TravelItemPresentable
,HistoryListPresentable
프로토콜을 채택하게 됨
- 따라서 TravelItemViewModel은
-
TravelItemViewModel
은HistoryProvider
를 SceneDelegate -> TravelListViewModel을 거쳐 주입받음
-
HistoryCell
화면 요소 추가 및 IBOutlet 연결 - assets에 카테고리 별 아이콘 추가
무료 아이콘 받아서 진행
-
HistoryItemViewModel
타입을 인자로 받은 configure 함수 구현 (현재는 임시로 DummyHistory 사용)- 금액 부분은 Double 타입을 extension하여 세자리수 단위로 콤마 추가
- 실제 사용될 HistoryItemViewModel 중, cell에 표현될 항목만 가져다 dummyData 생성
struct DummyHistory: Hashable {
var category: HistoryCategory
var title: String
var amount: Double
var date: Date
}
- 여행 날짜에 종속적인 헤더 모델을 구현해야 하므로 열거형 대신
구조체 활용레퍼런스 문제로 클래스로 변경
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을 배열로 바꾸고 날짜를 기준으로
정렬
(선택사항) 및 리턴
- item을 순회하면서
-
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
}
S035 유시형 @sihyungyou | S039 이승진 @devilzcough | S054 조송주 @songjucho
🤝 규칙
📱 개발 진행 상황
🧐 학습
- 고민거리
- 읽을거리
- TDD
- CoreData 학습내용
- CoreData에 TDD 적용하기
- 테스트 가능한 네트워크모델
- CI 입문기
- DiffableDataSource 적용해보기
- 테스트코드 커버리지 측정하기
- 비동기처리에 대한 유닛테스트
- 앱 배포하기
- TableView에 Pull to Refresh 적용하기
- Floating Action Button 직접 만들어보기
- Core Animation-PieChart 구현하기
- Core Animation-LaunchScreen 구현하기
- UIView.animate에 대한 테스트 작성해보기
- 유닛테스트의 한계와 통합테스트의 필요성