apple/RxSwift, ReactorKit

RxSwift + MVVM: 예제 코드 흐름 따라가기 #1

lgvv 2021. 7. 15. 15:45

RxSwift + MVVM: 예제 코드 흐름 따라가기 #1

 

이전에 RxSwift + MVVM 예제에서 UITableView를 사용해서 따라 구현했었는데, RxSwift를 더 학습하고 나서 코드를 다시 보고자 함.

 

이전 실습에서는 RxCocoa를 사용하지 않고 RxSwift만 사용해서 구현.

즉, `.tap` 등 사용하지 않고, Delegate를 활용

 

 

 

스크린샷

 

뷰 구성

 

 

파일 구조도

 

 

MVVM 설계

  • MainView
    • View : MainViewController를 구현
  • ViewModel : TableViewModel을 사용
    • 싱글톤으로 만들어서 데이터를 공용으로 관리하게끔
  • Model : TableCell을 선언하여 사용
    • 메인 뷰의 IBOulet을 여기서 갖게 만들자
  • DetailView
    • View : DetailViewController를 구현
  • ViewModel : MainView의 TableViewModel을 같이 사용
    • 가급적이면 데이터의 선언은 Model에서 데이터의 변경사항은 ViewModel에서 진행한다.
    • 함수는 가급적이면 ViewModel에서 사용하고자 하였으며, IBOulet의 엮인 것들은 Model에서 작성하였다.

 

 

 

 

 

 

 

performSegue

- 데이터 전달의 한 방법인데, 이건 자꾸 까먹어서 찾아보게 된다.

- unwindSegue도 있는데 이것도 자꾸 까먹는다

 

 

extension MainViewController : UITableViewDelegate {
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let row = indexPath.row
        performSegue(withIdentifier: "DetailViewController", sender: row)
        
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        
        guard let id = segue.identifier,
            id == "DetailViewController",
            let detailVC = segue.destination as? DetailViewController,
            let row = sender else {
            return
        }
        
        detailVC.row = row as? Int
        
    }
    
}