GoodNews
기본 강의를 듣기 전에 일단 MVC패턴으로 뉴스 REST API를 받아왔습니다. URLSession보단 최근에 Swift 재은씨 실전편을 통해 익혔던 Alamofire를 통해 데이터를 파싱하고 구현했습니다.
강의를 보면서 새롭게 Controller 대신 ViewModel 을 적용시켜 View에 관여하도록 코드를 구현했는데
음..?
Scene과 대응하는 Controller는 역시 제거를 안하는구나,, 좀 더 MVVM 패턴 공부를 해봐야겠다는 생각이 들었습니다.
GoodNews->ViewModel->ArticleViewModel.swift
다만 ViewModel은 Model과는 달랐다고 느낀게 Model은 데이터 그 자체 틀인건 분명한데
ViewModel에서는 Model을 인스턴스로하는 구조체를 생성합니다.(ArticleViewModel)
현재 클라이언트에 필수적으로 표시되기 위한 데이터 한 덩어리(ex_cell을 이루는 데이터 한 덩어리 == article)와 이 데이터를 반환할 수 있는 연산 프로퍼티들을 정의한다는게 색달랐습니다.
기존이라면 그냥?? 파싱한 데이터들을 곧바로 꺼내서 테이블 뷰 셀cellForRowAt에 적용시키는 건데......
또 한가지 눈여겨 본 점은 방금 정의한 ArticleViewModel은 단 한 뭉치의 데이터에 대해서만 참조를 하는 것이므로 단 한개의 cell만 정보를 채워넣을 수 있기에 실제로 이 한덩어리의 ArticleViewModel을 여러 개로 저장할 수있는 List를 정의해야되는데 어디에 정의하나 궁금했습니다. 평소같으면 UserDefaults나 AppDelegate, 그냥 Scene의 VC에 정의했는데,,
이를 상위모델로 추가한다는 것입니다.(ArticleListViewModel)
여기서 또 눈여겨 볼 점은 단순히 List만 갖는게 아니라 실제 프로퍼티 셀의 Controller : UITableViewController의 델리게이트 메소드에 필요한 정보들 또한 연산프로퍼티나 함수로 미리 입력해뒀다는 것입니다.( 이러면 Controller의 비중이 쫌 줄거같다는 생각이 들었습니다.)
그 밖에 새로 배운점은
- 데이터를 파싱할때 Service 로 Group하는것?!
- TableViewCell의 detailTextLabel의 numberOfLines를 0으로 설정하면 모든 String을 볼 수 있다는 점
- numberOfLines를 쓸 때 tableView(_:heightForRowAt:)를쓰면 Line이 늘어나지 않는다는점
- appearance 복습
- appearance .largeTitleTextAttributes를 navigationBar text가 커졌다가 다시 원래대로 작아진다는점
이대로 끝난게 좀 아쉬웠지만 그래도 남아 있는 JSON parameter중에 url이있어서 cell을 터치하면 WKWebView로 띄우는 것을 추가 구현했습니다.
(여기서 한가지 어려웠던 점은 navigation Bar를 추가 구현해야 back 버튼을 추가할 수 있다는 점)
(마지막으로 어려웠던 것은 커스텀으로 navigation title을 설정했는데 .largeTitleTextAttributes 적용이 어려웠다는 점)
'(TIL)Today I Learned' 카테고리의 다른 글
[Today I Learned] 22.09.12 (0) | 2022.09.12 |
---|---|
[Today I Learned] 22.09.11 (0) | 2022.09.12 |
[Today I Learned] 22.09.08 (0) | 2022.09.08 |