본문 바로가기

(TIL)Today I Learned

[Today I Learned] 22.09.11

GoodWeather

새로 적용한 것 & 느낀점

  1. 강의 계획을 보고 사전에 UI 구현
  2. 클린코드를 읽으며 TDD 개념에 대해 알게 되었다. 한번 TestModule로 데이터 파싱에 대한 테스트 코드를 만들어 봤다. 이게 맞는건지는 추가적으로 공부 해야겠다.
  3. 테스트 코드를 통해 성공적으로 작동될 경우에 VM 등을 만들어서 하는 것도 좋은 방법임을 알게 되었다. 테스트 코드를 몇가지 상황에서 작성을 해봤다.

VM의 역할은 클라이언트에 데이터를 채울때 그 모든 정보를 VM에서 제공하는 것. 그래서 VM은 Controller한테 특정 데이터들 값을 바로 바로 제공하면 되는 것! Controller는 VM의 처리과정에 대한 연산 없이 결과값을 반환 받기만 할 정도로 Controller역할이 낮아지고 VM역할이 커지는 것을 알게 됨.

배운점

  • UINavigationController를 세그로 연결받은 뷰에는 자동으로 뒤로가기 버튼이 구현되는데 이 값 또한 appearance로 적용 해야한다.
  • UIBarButtonItem.appearance().tintColor = UIColor.white
  • JSON으로 gif 적용.(with Lottie open source)
    UIBarButtonItem의 customView에 AnimationView타입 적용. 버튼 터치이벤트 인식 안되서 Gesture를 달아주니 잘 됨!
  • final 키워드를 통해 더 이상 상속으로 변경할 수 없는 클래스 선언할수 있음.
  • 서버에서 URLSession이나 Alamofire로 데이터를 요청할 때 @escaping completion으로 데이터 파싱 결과값을 처리한다.
    completion은 백그라운드 thread(sub thread)에서 실행이 된다. completion 인자값으로 전달받은 데이터를 UI를 위한 값으로 처리하게 된다면 문제가 생긴다. ( UI업데이트 이슈가 생김)
    service에서 load한 데이터 값 completion으로 escaping할땐 main thread로 completion을 넘겨주어야 한다.
  • 아는 친한 형한테 배웠는데 이때 메인큐에서 sync를 사용하게 되면 기존에 실행되던 기존에 진행되던 main Queue 흐름과 충돌이 된다. 그래서 async로 처리를 해야한다.
  • apiKey가 노출되면 안될 경우가 있는데 이를 간과했다. 담부터는 .gitignore에 민감한 정보는 따로 빼서 깃 커밋을 배제해야겠다...

  1. 와우. 이번에 Service/Webservice.swift에서 Resource는 load(resource:completion:)에서 파싱된 데이터를 저장해서 codable 제너릭타입으로 반환할 수 있는 parse 클로저를 갖고 있다. Alamofire를 쓰지 않아도 될 정도로 코드가 작게 분리됬다. 하지만 responseDecodable을 쓰면 JSonDeocder().decoe(_:from:)을 자동으로 해주니까 훨씬 간결한 코드를 작성할 수 있지만, 이번 강의를 통해 또 하나 새로 배워간다.

구현 완료!

'(TIL)Today I Learned' 카테고리의 다른 글

[Today I Learned] 22.09.12  (0) 2022.09.12
[Today I Learned] 22.09.08  (0) 2022.09.08
[Today I Learned] 22.09.04  (0) 2022.09.04