Skip to content

Commit

Permalink
[Refactor] 영화 뷰 뷰모델 분리 (#7)
Browse files Browse the repository at this point in the history
  • Loading branch information
seuriseuljjeok committed May 27, 2024
1 parent 49b5cf9 commit a0a9467
Show file tree
Hide file tree
Showing 8 changed files with 377 additions and 80 deletions.
20 changes: 8 additions & 12 deletions Tving_CloneProject/Tving_CloneProject.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,10 @@

/* Begin PBXBuildFile section */
CA1F68F02BD5691D00439E33 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1F68EF2BD5691D00439E33 /* MainViewController.swift */; };
CA1F68F32BD5698C00439E33 /* MainPosterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1F68F22BD5698C00439E33 /* MainPosterView.swift */; };
CA1F68F52BD578B500439E33 /* NavigationBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1F68F42BD578B500439E33 /* NavigationBarView.swift */; };
CA1F68F82BD57D3A00439E33 /* Contents.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1F68F72BD57D3A00439E33 /* Contents.swift */; };
CA1F68FB2BD5886600439E33 /* MainPosterCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1F68FA2BD5886600439E33 /* MainPosterCell.swift */; };
CA1F68FD2BD58ED700439E33 /* PagerButtonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1F68FC2BD58ED700439E33 /* PagerButtonCell.swift */; };
CA22B3C52BED37090013B7AB /* DailyBoxOfficeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA22B3C42BED37090013B7AB /* DailyBoxOfficeCell.swift */; };
CA3952E62BC31F9900B15E91 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3952E52BC31F9900B15E91 /* AppDelegate.swift */; };
CA3952E82BC31F9900B15E91 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3952E72BC31F9900B15E91 /* SceneDelegate.swift */; };
CA3952EA2BC31F9900B15E91 /* LoginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3952E92BC31F9900B15E91 /* LoginViewController.swift */; };
Expand Down Expand Up @@ -46,7 +44,6 @@
CA8496F22BE8A6700064E0CC /* NetworkResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8496F12BE8A6700064E0CC /* NetworkResult.swift */; };
CA8496F62BE947040064E0CC /* LiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8496F52BE947040064E0CC /* LiveView.swift */; };
CA8496F82BE947F90064E0CC /* TVProgramView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8496F72BE947F90064E0CC /* TVProgramView.swift */; };
CA8496FA2BE9482C0064E0CC /* MovieView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8496F92BE9482C0064E0CC /* MovieView.swift */; };
CA8496FC2BE948590064E0CC /* ParamountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA8496FB2BE948590064E0CC /* ParamountView.swift */; };
CA902EBC2BD6F9F900560D26 /* ImageWithTitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA902EBB2BD6F9F900560D26 /* ImageWithTitleCell.swift */; };
CA902EC02BD6FE1400560D26 /* BasicHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA902EBF2BD6FE1400560D26 /* BasicHeaderView.swift */; };
Expand All @@ -60,17 +57,17 @@
CA902EF72BDE9E5E00560D26 /* SearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA902EF62BDE9E5E00560D26 /* SearchViewController.swift */; };
CA902EF92BDE9E6700560D26 /* HistoryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA902EF82BDE9E6700560D26 /* HistoryViewController.swift */; };
CA902EFB2BDEB51500560D26 /* PageControlButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA902EFA2BDEB51500560D26 /* PageControlButtonView.swift */; };
CAB6E7EC2C0485E300E49F9E /* DailyBoxOfficeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAB6E7EB2C0485E300E49F9E /* DailyBoxOfficeCell.swift */; };
CAB6E7EE2C04863200E49F9E /* MovieView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAB6E7ED2C04863200E49F9E /* MovieView.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
CA05B3AD2BF331B100DA77E1 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = "<group>"; };
CA1F68EF2BD5691D00439E33 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = "<group>"; };
CA1F68F22BD5698C00439E33 /* MainPosterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainPosterView.swift; sourceTree = "<group>"; };
CA1F68F42BD578B500439E33 /* NavigationBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBarView.swift; sourceTree = "<group>"; };
CA1F68F72BD57D3A00439E33 /* Contents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Contents.swift; sourceTree = "<group>"; };
CA1F68FA2BD5886600439E33 /* MainPosterCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainPosterCell.swift; sourceTree = "<group>"; };
CA1F68FC2BD58ED700439E33 /* PagerButtonCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PagerButtonCell.swift; sourceTree = "<group>"; };
CA22B3C42BED37090013B7AB /* DailyBoxOfficeCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyBoxOfficeCell.swift; sourceTree = "<group>"; };
CA3952E22BC31F9900B15E91 /* Tving_CloneProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tving_CloneProject.app; sourceTree = BUILT_PRODUCTS_DIR; };
CA3952E52BC31F9900B15E91 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
CA3952E72BC31F9900B15E91 /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -101,7 +98,6 @@
CA8496F12BE8A6700064E0CC /* NetworkResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkResult.swift; sourceTree = "<group>"; };
CA8496F52BE947040064E0CC /* LiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveView.swift; sourceTree = "<group>"; };
CA8496F72BE947F90064E0CC /* TVProgramView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TVProgramView.swift; sourceTree = "<group>"; };
CA8496F92BE9482C0064E0CC /* MovieView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovieView.swift; sourceTree = "<group>"; };
CA8496FB2BE948590064E0CC /* ParamountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParamountView.swift; sourceTree = "<group>"; };
CA902EBB2BD6F9F900560D26 /* ImageWithTitleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageWithTitleCell.swift; sourceTree = "<group>"; };
CA902EBF2BD6FE1400560D26 /* BasicHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasicHeaderView.swift; sourceTree = "<group>"; };
Expand All @@ -115,6 +111,8 @@
CA902EF62BDE9E5E00560D26 /* SearchViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchViewController.swift; sourceTree = "<group>"; };
CA902EF82BDE9E6700560D26 /* HistoryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryViewController.swift; sourceTree = "<group>"; };
CA902EFA2BDEB51500560D26 /* PageControlButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PageControlButtonView.swift; sourceTree = "<group>"; };
CAB6E7EB2C0485E300E49F9E /* DailyBoxOfficeCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DailyBoxOfficeCell.swift; sourceTree = "<group>"; };
CAB6E7ED2C04863200E49F9E /* MovieView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovieView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -155,16 +153,15 @@
isa = PBXGroup;
children = (
CA1F68F92BD5884200439E33 /* Cells */,
CA1F68F22BD5698C00439E33 /* MainPosterView.swift */,
CA1F68F42BD578B500439E33 /* NavigationBarView.swift */,
CA902EBF2BD6FE1400560D26 /* BasicHeaderView.swift */,
CA902EC72BDB8D3900560D26 /* UnderlineSegmentedControlView.swift */,
CA902EC92BDB8E5C00560D26 /* HeaderCategoryView.swift */,
CA902EFA2BDEB51500560D26 /* PageControlButtonView.swift */,
CA8496F52BE947040064E0CC /* LiveView.swift */,
CA8496F72BE947F90064E0CC /* TVProgramView.swift */,
CA8496F92BE9482C0064E0CC /* MovieView.swift */,
CA8496FB2BE948590064E0CC /* ParamountView.swift */,
CAB6E7ED2C04863200E49F9E /* MovieView.swift */,
);
path = Views;
sourceTree = "<group>";
Expand All @@ -186,7 +183,7 @@
CA902EBB2BD6F9F900560D26 /* ImageWithTitleCell.swift */,
CA902EC32BD9542000560D26 /* ImageOnlyCell.swift */,
CA902EC52BDAA0E200560D26 /* PopularLiveCell.swift */,
CA22B3C42BED37090013B7AB /* DailyBoxOfficeCell.swift */,
CAB6E7EB2C0485E300E49F9E /* DailyBoxOfficeCell.swift */,
);
path = Cells;
sourceTree = "<group>";
Expand Down Expand Up @@ -545,18 +542,17 @@
CA8496EE2BE8A1680064E0CC /* MainService.swift in Sources */,
CA902EC02BD6FE1400560D26 /* BasicHeaderView.swift in Sources */,
CA902EC22BD789FF00560D26 /* UIStackView+.swift in Sources */,
CA22B3C52BED37090013B7AB /* DailyBoxOfficeCell.swift in Sources */,
CA3952EA2BC31F9900B15E91 /* LoginViewController.swift in Sources */,
CA3952E62BC31F9900B15E91 /* AppDelegate.swift in Sources */,
CA902EED2BDE9CD800560D26 /* TabBarViewController.swift in Sources */,
CA1F68F82BD57D3A00439E33 /* Contents.swift in Sources */,
CA3953192BC47D3300B15E91 /* UILabel+.swift in Sources */,
CA902ECA2BDB8E5C00560D26 /* HeaderCategoryView.swift in Sources */,
CA902EC82BDB8D3900560D26 /* UnderlineSegmentedControlView.swift in Sources */,
CAB6E7EC2C0485E300E49F9E /* DailyBoxOfficeCell.swift in Sources */,
CA3953172BC45DA300B15E91 /* UIFont+.swift in Sources */,
CA3952E82BC31F9900B15E91 /* SceneDelegate.swift in Sources */,
CA1F68FB2BD5886600439E33 /* MainPosterCell.swift in Sources */,
CA1F68F32BD5698C00439E33 /* MainPosterView.swift in Sources */,
CA3953252BC6FB1100B15E91 /* ScreenUtils.swift in Sources */,
CA8496E72BE7E8E60064E0CC /* GetMovieResponseModel.swift in Sources */,
CA8496F82BE947F90064E0CC /* TVProgramView.swift in Sources */,
Expand All @@ -569,7 +565,7 @@
CA39531E2BC5AFE300B15E91 /* CreateNicknameViewController.swift in Sources */,
CA3BA70F2BFE7E9800F77616 /* MainViewModel.swift in Sources */,
CA1F68F52BD578B500439E33 /* NavigationBarView.swift in Sources */,
CA8496FA2BE9482C0064E0CC /* MovieView.swift in Sources */,
CAB6E7EE2C04863200E49F9E /* MovieView.swift in Sources */,
CA902EC42BD9542000560D26 /* ImageOnlyCell.swift in Sources */,
CA8496E52BE7E54D0064E0CC /* Config.swift in Sources */,
CA902EC62BDAA0E200560D26 /* PopularLiveCell.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ final class MainViewModel {

private var categoryData: [Contents] = []

private var dailyBoxOfficeData: [DailyBoxOfficeList] = []

let dataSource: [MainSection] = MainSection.dataSource

}
Expand All @@ -63,6 +65,10 @@ extension MainViewModel {
return self.popularData
}

func fetchDailyBoxOfficeData() -> [DailyBoxOfficeList] {
return self.dailyBoxOfficeData
}

func getMovieInfo() {
let currentDate = calculateDate()

Expand Down Expand Up @@ -94,6 +100,27 @@ extension MainViewModel {
}
}

func getDailyBoxOffice() {

let date = calculateDate()

self.isLoading = true

MainService.shared.getMovieList(date: date) { response in
switch response {
case .success(let data):
guard let data = data as? GetMovieResponseModel else { return }
self.dailyBoxOfficeData = data.boxOfficeResult.dailyBoxOfficeList

self.isLoading = false
self.isSuccess = true

default:
return
}
}
}

func calculateDate() -> String {

let today = Date()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
//
// DailyBoxOfficeCell.swift
// Tving_CloneProject
//
Expand Down Expand Up @@ -120,3 +119,4 @@ class DailyBoxOfficeCell: UICollectionViewCell {
}

}

Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
////
//// MainPosterView.swift
//// Tving_CloneProject
////
//// Created by 윤희슬 on 4/22/24.
////
//
// MainPosterView.swift
// Tving_CloneProject
//import UIKit
//
// Created by 윤희슬 on 4/22/24.
//class MainPosterView: UIView {
//
// // MARK: - UI Properties
//
// // MARK: - Properties
//
// override init(frame: CGRect) {
// super.init(frame: frame)
// }
//
// required init?(coder: NSCoder) {
// fatalError("init(coder:) has not been implemented")
// }
//
//}
//

import UIKit

class MainPosterView: UIView {

// MARK: - UI Properties

// MARK: - Properties

override init(frame: CGRect) {
super.init(frame: frame)
}

required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

}


// MARK: - Private Methods
//
//// MARK: - Private Methods
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,21 @@ class MovieView: UIView {

// MARK: - Properties

private var dailyBoxOfficeData: [DailyBoxOfficeList] = []
private var mainViewModel: MainViewModel = MainViewModel()


// MARK: - Life Cycles

override init(frame: CGRect) {
super.init(frame: frame)

getDailyBoxOffice()
setHierarchy()
setLayout()
setStyle()
setDelegate()
registerCell()
setViewModel()
mainViewModel.getDailyBoxOffice()
}

required init?(coder: NSCoder) {
Expand Down Expand Up @@ -72,6 +73,22 @@ private extension MovieView {
}
}

func setViewModel() {
mainViewModel.didUpdateNetworkResult = { [weak self] _ in
DispatchQueue.main.async {
self?.dailyBoxOfficeCollectionView.reloadData()
}
}

mainViewModel.didChangeLoadingIndicator = { [weak self] isLoading in
if isLoading {
self?.loadingIndicator.startAnimating()
} else {
self?.loadingIndicator.stopAnimating()
}
}
}

func registerCell() {

dailyBoxOfficeCollectionView.register(DailyBoxOfficeCell.self, forCellWithReuseIdentifier: DailyBoxOfficeCell.identifier)
Expand All @@ -83,45 +100,6 @@ private extension MovieView {
dailyBoxOfficeCollectionView.dataSource = self
}

func getDailyBoxOffice() {

let date = calculateDate()

loadingIndicator.startAnimating()

MainService.shared.getMovieList(date: date) { response in
switch response {
case .success(let data):
guard let data = data as? GetMovieResponseModel else { return }
self.dailyBoxOfficeData = data.boxOfficeResult.dailyBoxOfficeList

self.loadingIndicator.stopAnimating()
self.dailyBoxOfficeCollectionView.reloadData()

default:
return
}
}
}

func calculateDate() -> String {

let today = Date()
let calendar = Calendar.current
var dateComponents = DateComponents()
dateComponents.day = -1

if let oneDayAgo = calendar.date(byAdding: dateComponents, to: today) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyyMMdd"

let oneDayAgoString = dateFormatter.string(from: oneDayAgo)
return oneDayAgoString
} else {
return ""
}
}

}

extension MovieView: UICollectionViewDelegateFlowLayout {
Expand All @@ -148,13 +126,13 @@ extension MovieView: UICollectionViewDataSource {

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

return self.dailyBoxOfficeData.count
return mainViewModel.fetchDailyBoxOfficeData().count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: DailyBoxOfficeCell.identifier, for: indexPath) as? DailyBoxOfficeCell else { return UICollectionViewCell() }
cell.setCell(contents: dailyBoxOfficeData[indexPath.row])
cell.setCell(contents: mainViewModel.fetchDailyBoxOfficeData()[indexPath.row])

return cell
}
Expand All @@ -163,3 +141,4 @@ extension MovieView: UICollectionViewDataSource {


}

Loading

0 comments on commit a0a9467

Please sign in to comment.