apple/UIKit & ReactiveX
🐉 RxSwift + MVVM (TableView) 코드1
lgvv
2021. 7. 15. 15:45
✅ 이번 시간에는 스터디에서 공부했던 테이블 뷰 코드리뷰를 할 생각이야.
❗️주의사항 - RxSwift를 주로 사용하였으며, RxCocoa를 사용한 코드는 따로 포스팅을 다시할 예정.
(쉽게 말해서 .bind, rx.tap 등을 사용하지 않고 delegate와 dataSource로 작성하였음)
MVVM 패턴 및 Singleton패턴을 사용하였음.
코드를 볼 수 있는 곳 : https://github.com/lgvv/MVVM_RxSwift/tree/main/week2_lgvv_pratice
🟠 뷰의 구성도
✅ MVVM 설계
(MainView)
View : MainViewController를 구현
ViewModel : TableViewModel을 사용
- 싱글톤으로 만들어서 데이터를 공용으로 관리하게끔
Model : TableCell을 선언하여 사용
- 메인 뷰의 IBOulet을 여기서 갖게 만들자
(DetailView)
View : DetailViewController를 구현
ViewModel : MainView의 TableViewModel을 같이 사용
가급적이면 데이터의 선언은 Model에서 데이터의 변경사항은 ViewModel에서 진행한다.
함수는 가급적이면 ViewModel에서 사용하고자 하였으며, IBOulet의 엮인 것들은 Model에서 작성하였다.
✅ performSegue
- 데이터 전달의 한 방법인데, 이건 자꾸 까먹어서 찾아보게 된다.
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
}
}