@@ -11,27 +11,24 @@ final class MoviesListTableViewController: UITableViewController {
11
11
12
12
var posterImagesRepository : PosterImagesRepository ?
13
13
var nextPageLoadingSpinner : UIActivityIndicatorView ?
14
-
14
+
15
15
var viewModel : MoviesListViewModel !
16
- var items : [ MoviesListItemViewModel ] = [ ] {
17
- didSet { reload ( ) }
18
- }
19
-
16
+
20
17
override func viewDidLoad( ) {
21
18
super. viewDidLoad ( )
22
19
tableView. estimatedRowHeight = MoviesListItemCell . height
23
20
tableView. rowHeight = UITableView . automaticDimension
24
21
bind ( to: viewModel)
25
22
}
26
-
23
+
27
24
private func bind( to viewModel: MoviesListViewModel ) {
28
25
viewModel. loadingType. observe ( on: self ) { [ weak self] in self ? . update ( isLoadingNextPage: $0 == . nextPage) }
29
26
}
30
-
27
+
31
28
func reload( ) {
32
29
tableView. reloadData ( )
33
30
}
34
-
31
+
35
32
func update( isLoadingNextPage: Bool ) {
36
33
if isLoadingNextPage {
37
34
nextPageLoadingSpinner? . removeFromSuperview ( )
@@ -48,31 +45,30 @@ final class MoviesListTableViewController: UITableViewController {
48
45
49
46
// MARK: - UITableViewDataSource, UITableViewDelegate
50
47
extension MoviesListTableViewController {
51
-
48
+
52
49
override func tableView( _ tableView: UITableView , numberOfRowsInSection section: Int ) -> Int {
53
- return items. count
50
+ return viewModel . items. value . count
54
51
}
55
-
52
+
56
53
override func tableView( _ tableView: UITableView , cellForRowAt indexPath: IndexPath ) -> UITableViewCell {
57
54
guard let cell = tableView. dequeueReusableCell ( withIdentifier: MoviesListItemCell . reuseIdentifier, for: indexPath) as? MoviesListItemCell else {
58
- assertionFailure ( " Cannot dequeue reusable cell \( MoviesListItemCell . self) with reuseIdentifier: \( MoviesListItemCell . reuseIdentifier) " )
59
- return . init( )
55
+ fatalError ( " Cannot dequeue reusable cell \( MoviesListItemCell . self) with reuseIdentifier: \( MoviesListItemCell . reuseIdentifier) " )
60
56
}
61
57
62
- cell. fill ( with: items [ indexPath. row] ,
58
+ cell. fill ( with: viewModel . items. value [ indexPath. row] ,
63
59
posterImagesRepository: posterImagesRepository)
64
60
65
- if indexPath. row == items. count - 1 {
61
+ if indexPath. row == viewModel . items. value . count - 1 {
66
62
viewModel. didLoadNextPage ( )
67
63
}
68
-
64
+
69
65
return cell
70
66
}
71
-
67
+
72
68
override func tableView( _ tableView: UITableView , heightForRowAt indexPath: IndexPath ) -> CGFloat {
73
69
return viewModel. isEmpty ? tableView. frame. height : super. tableView ( tableView, heightForRowAt: indexPath)
74
70
}
75
-
71
+
76
72
override func tableView( _ tableView: UITableView , didSelectRowAt indexPath: IndexPath ) {
77
73
viewModel. didSelectItem ( at: indexPath. row)
78
74
}
0 commit comments