Toy Project/To Do List (iOS)

6. View Model

개발자킹콩 2021. 3. 8. 15:32

 

ViewModel

 

 

우리는 TodoListViewModel을 만들 것인데,

여기서 중요한 것은 View Model에서는 TodoManager를 활용 한다는 것이다.

 

 

TodoViewModel에서는 Section이라는 것이 존재한다.

이는 Today Section과 Upcoming Section을 나누기 위함이다. 

case는 다음과 같이 두 경우가 존재하며, Section.today와 Section.upcoming로 title을 불러올 수 있다.

이러한 표현을 익혀두자. 

 

TodoViewModel의 경우 TodoManager을 적극 활용하기 때문에 singleton객체로 선언된 TodoManager의 shared를 들고와 변수로 선언하였다. 그런데 ViewController와 함수호출을 통해 정보를 주고받는 것은 ViewModel이기에 TodoManager의 경우 private로 선언하였다. 

 

아래의 computed property와 method는 manager의 메소드를 적극 활용함을 알 수 있다. 

기능은 간단하기에 설명 생략한다.

 

 

 

 

 


 

 

ViewModel in ViewController

 

 

 

ViewController에서 수행할 기능들을 살펴본 다음 간단한 것은 바로 구현할 것이고,  아래의 키보드 기능이 들어가는 것은 남겨둘 것이다. 

 

 

 

 

 

 

 

 

 

우선 TodoViewModel을 만든다.

 

 

 

 

그리고 viewDidLoad 부분에 데이터를 불러오는 코드를 구현할 것이다. 

TodoList 어플리케이션이 실행이 되면 적어 놓았던 할일 목록들을 띄워야 하기 때문이다. 

디스크에 있는 Todo 목록들을 가져오겠다. 

 

 

 

 

 


 

 

 

UICollectionViewDataSource

 

 

 

 


 

 

 

section의 갯수와 각 section에 해당하는 cell의 갯수는 다음과 같다. 

 

 

todoListViewModel.numOfSection을 반환하게 되면 현재 Section의 갯수는 2개가 존재한다.

그리고 아래의 numberOfItemsInSection 인자로 받아온 section은 값으로 구분되어 있다. 

0이면 todaySection, 1이면 upcomingSection이다. 조건을 두어 Section에 맞는 cell의 갯수를 반환한다.

 

 

 

 


 

 

 

 

이 셀들이 어떻게 표현되는지를 구현해보자 

 

 

 

각 섹션을 확인한 다음 해당하는 indexPath.item을 updateUI 하는 것이다. 

checkButton 과 deleteButton 이 눌렸을때의 기능을 후에 작성하도록 하자.

 

 

 

 

 


 

HeaderView (UICollectionReusableView)

 

 

 

현재 kind라는 인자로 해당 View의 종류가 HeaderView인지 FooterView인지 알고있는 상태이다.

그래서 switch문을 이용해서 kind의 종류가 UICollectionView.elementKindSectionHeader인지를 확인하게 되고, 재사용되는 HeaderView를 지정하게 되고, indexPath에 해당하는 section을 section 변수에 넣어 title를 headerView의 sectionTitleLabel.text에 넣게되고 업데이트된 header를 반환하게 된다.

 

 

 

 

 


 

 

 

 

UICollectionViewDelegateFlowLayout

 

 

우선 UICollectionViewDelegateFlowLayout 의 프로토콜에 해당하는 부분을 완성해서 셀의 크기를 계산해주자.

 

 

 

셀의 크기는 width는 어플의 크기 가득 지정하고, height는 50으로 지정하여 CGSize객체로 반환한다.

 

 

 

 

 

 

'Toy Project > To Do List (iOS)' 카테고리의 다른 글

8. Storage 이론  (0) 2021.03.09
7. TodoListCell 완성  (0) 2021.03.09
5. Todo, TodoManager  (0) 2021.03.07
4. TodoListCell  (0) 2021.03.07
3. Tasks Page  (0) 2021.03.06