diff --git a/KkuMulKum.xcodeproj/project.pbxproj b/KkuMulKum.xcodeproj/project.pbxproj index 3fd4d826..1b38ab11 100644 --- a/KkuMulKum.xcodeproj/project.pbxproj +++ b/KkuMulKum.xcodeproj/project.pbxproj @@ -65,16 +65,16 @@ 78BD61272C446A97005752FD /* LoginTargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78BD61262C446A97005752FD /* LoginTargetType.swift */; }; 78BD612B2C4550A6005752FD /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78BD612A2C4550A6005752FD /* Bundle.swift */; }; A3DD9C3D2C41BAD000E58A13 /* MeetingTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C322C41BAD000E58A13 /* MeetingTableViewCell.swift */; }; - A3DD9C3E2C41BAD000E58A13 /* MeetingDummyModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C342C41BAD000E58A13 /* MeetingDummyModel.swift */; }; A3DD9C3F2C41BAD000E58A13 /* MeetingListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C362C41BAD000E58A13 /* MeetingListView.swift */; }; A3DD9C402C41BAD000E58A13 /* MeetingListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C382C41BAD000E58A13 /* MeetingListViewController.swift */; }; A3DD9C412C41BAD000E58A13 /* MeetingListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C3A2C41BAD000E58A13 /* MeetingListViewModel.swift */; }; A3DD9C5A2C43F99800E58A13 /* SetReadyInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C592C43F99700E58A13 /* SetReadyInfoView.swift */; }; A3DD9C5C2C43F9A800E58A13 /* SetReadyInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C5B2C43F9A800E58A13 /* SetReadyInfoViewController.swift */; }; A3DD9C5F2C441F8E00E58A13 /* SetReadyInfoViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C5E2C441F8E00E58A13 /* SetReadyInfoViewModel.swift */; }; + A3DD9C622C455E3300E58A13 /* MeetingListService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3DD9C612C455E3300E58A13 /* MeetingListService.swift */; }; A3FB184D2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB184C2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift */; }; A3FB184F2C3BF4BC001483E5 /* MakeMeetingsResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB184E2C3BF4BB001483E5 /* MakeMeetingsResponseModel.swift */; }; - A3FB18512C3BF531001483E5 /* RegisterMeetingsResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB18502C3BF531001483E5 /* RegisterMeetingsResponseModel.swift */; }; + A3FB18512C3BF531001483E5 /* RegisterMeetingsResquestModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB18502C3BF531001483E5 /* RegisterMeetingsResquestModel.swift */; }; A3FB18572C3BF704001483E5 /* MeetingListResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB18562C3BF704001483E5 /* MeetingListResponseModel.swift */; }; A3FB18592C3BF77D001483E5 /* MeetingInfoResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB18582C3BF77D001483E5 /* MeetingInfoResponseModel.swift */; }; A3FB185B2C3BF7DF001483E5 /* MeetingMembersResponseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3FB185A2C3BF7DF001483E5 /* MeetingMembersResponseModel.swift */; }; @@ -211,16 +211,16 @@ 78BD61262C446A97005752FD /* LoginTargetType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginTargetType.swift; sourceTree = ""; }; 78BD612A2C4550A6005752FD /* Bundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = ""; }; A3DD9C322C41BAD000E58A13 /* MeetingTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingTableViewCell.swift; sourceTree = ""; }; - A3DD9C342C41BAD000E58A13 /* MeetingDummyModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingDummyModel.swift; sourceTree = ""; }; A3DD9C362C41BAD000E58A13 /* MeetingListView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingListView.swift; sourceTree = ""; }; A3DD9C382C41BAD000E58A13 /* MeetingListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingListViewController.swift; sourceTree = ""; }; A3DD9C3A2C41BAD000E58A13 /* MeetingListViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MeetingListViewModel.swift; sourceTree = ""; }; A3DD9C592C43F99700E58A13 /* SetReadyInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetReadyInfoView.swift; sourceTree = ""; }; A3DD9C5B2C43F9A800E58A13 /* SetReadyInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetReadyInfoViewController.swift; sourceTree = ""; }; A3DD9C5E2C441F8E00E58A13 /* SetReadyInfoViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SetReadyInfoViewModel.swift; sourceTree = ""; }; + A3DD9C612C455E3300E58A13 /* MeetingListService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingListService.swift; sourceTree = ""; }; A3FB184C2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeMeetingsRequestModel.swift; sourceTree = ""; }; A3FB184E2C3BF4BB001483E5 /* MakeMeetingsResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeMeetingsResponseModel.swift; sourceTree = ""; }; - A3FB18502C3BF531001483E5 /* RegisterMeetingsResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterMeetingsResponseModel.swift; sourceTree = ""; }; + A3FB18502C3BF531001483E5 /* RegisterMeetingsResquestModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegisterMeetingsResquestModel.swift; sourceTree = ""; }; A3FB18562C3BF704001483E5 /* MeetingListResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingListResponseModel.swift; sourceTree = ""; }; A3FB18582C3BF77D001483E5 /* MeetingInfoResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingInfoResponseModel.swift; sourceTree = ""; }; A3FB185A2C3BF7DF001483E5 /* MeetingMembersResponseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingMembersResponseModel.swift; sourceTree = ""; }; @@ -568,6 +568,7 @@ isa = PBXGroup; children = ( A3DD9C362C41BAD000E58A13 /* MeetingListView.swift */, + A3DD9C322C41BAD000E58A13 /* MeetingTableViewCell.swift */, ); path = View; sourceTree = ""; @@ -591,11 +592,9 @@ A3DD9C3C2C41BAD000E58A13 /* MeetingList */ = { isa = PBXGroup; children = ( - A3DD9C332C41BAD000E58A13 /* Cell */, - A3DD9C352C41BAD000E58A13 /* Model */, - A3DD9C372C41BAD000E58A13 /* View */, - A3DD9C392C41BAD000E58A13 /* ViewController */, A3DD9C3B2C41BAD000E58A13 /* ViewModel */, + A3DD9C392C41BAD000E58A13 /* ViewController */, + A3DD9C372C41BAD000E58A13 /* View */, ); path = MeetingList; sourceTree = ""; @@ -608,6 +607,14 @@ path = ViewModel; sourceTree = ""; }; + A3DD9C642C45B30600E58A13 /* Service */ = { + isa = PBXGroup; + children = ( + A3DD9C612C455E3300E58A13 /* MeetingListService.swift */, + ); + path = Service; + sourceTree = ""; + }; DD3976692C41769900E2A4C4 /* ViewModel */ = { isa = PBXGroup; children = ( @@ -652,10 +659,9 @@ isa = PBXGroup; children = ( DD3976762C41C2AD00E2A4C4 /* ViewModel */, - DD3976782C41C2AD00E2A4C4 /* Cell */, - DD39767A2C41C2AD00E2A4C4 /* Model */, - DD39767C2C41C2AD00E2A4C4 /* View */, DD3976812C41C2AD00E2A4C4 /* ViewController */, + DD39767C2C41C2AD00E2A4C4 /* View */, + DD39767A2C41C2AD00E2A4C4 /* Model */, ); path = Home; sourceTree = ""; @@ -668,14 +674,6 @@ path = ViewModel; sourceTree = ""; }; - DD3976782C41C2AD00E2A4C4 /* Cell */ = { - isa = PBXGroup; - children = ( - DD3976792C41C2AD00E2A4C4 /* UpcomingPromiseCollecitonViewCell.swift */, - ); - path = Cell; - sourceTree = ""; - }; DD39767A2C41C2AD00E2A4C4 /* Model */ = { isa = PBXGroup; children = ( @@ -691,6 +689,7 @@ DD39767E2C41C2AD00E2A4C4 /* TodayPromiseView.swift */, DD39767F2C41C2AD00E2A4C4 /* UpcomingEmptyView.swift */, DD3976802C41C2AD00E2A4C4 /* TodayEmptyView.swift */, + DD3976792C41C2AD00E2A4C4 /* UpcomingPromiseCollecitonViewCell.swift */, ); path = View; sourceTree = ""; @@ -1069,6 +1068,7 @@ isa = PBXGroup; children = ( 78BD612C2C455680005752FD /* Bundle */, + A3DD9C642C45B30600E58A13 /* Service */, DEBA03302C3C2972002ED8F2 /* ViewController.swift */, DD39768B2C41C36B00E2A4C4 /* Color.xcassets */, 78B928742C29402E006D9942 /* Assets.xcassets */, @@ -1256,7 +1256,7 @@ children = ( A3FB184C2C3BF45F001483E5 /* MakeMeetingsRequestModel.swift */, A3FB184E2C3BF4BB001483E5 /* MakeMeetingsResponseModel.swift */, - A3FB18502C3BF531001483E5 /* RegisterMeetingsResponseModel.swift */, + A3FB18502C3BF531001483E5 /* RegisterMeetingsResquestModel.swift */, A3FB18562C3BF704001483E5 /* MeetingListResponseModel.swift */, A3FB18582C3BF77D001483E5 /* MeetingInfoResponseModel.swift */, A3FB185A2C3BF7DF001483E5 /* MeetingMembersResponseModel.swift */, @@ -1467,7 +1467,7 @@ 78BD61232C440AD5005752FD /* AuthService.swift in Sources */, DD931B722C3DA92700526452 /* EnterReadyInfoButtonView.swift in Sources */, DD41BEFF2C41DAA40095A068 /* TardyEmptyView.swift in Sources */, - A3FB18512C3BF531001483E5 /* RegisterMeetingsResponseModel.swift in Sources */, + A3FB18512C3BF531001483E5 /* RegisterMeetingsResquestModel.swift in Sources */, 789AD4B32C3C0093002E2688 /* SocialLoginResponseModel.swift in Sources */, DD43937F2C41357800EC1799 /* InviteCodeViewModel.swift in Sources */, DE9E188B2C3BC92500DB76B4 /* EmptyModel.swift in Sources */, @@ -1514,7 +1514,6 @@ DE254AAE2C31193600A4015E /* UIFont+.swift in Sources */, DE6D4D152C3F14D80005584B /* InvitationCodePopUpViewController.swift in Sources */, DD4393792C412F4500EC1799 /* JoinButtonView.swift in Sources */, - A3DD9C3E2C41BAD000E58A13 /* MeetingDummyModel.swift in Sources */, DD3976832C41C2AD00E2A4C4 /* HomeViewModel.swift in Sources */, DD41BF012C41DE4F0095A068 /* TardyCollectionViewCell.swift in Sources */, DE9E189A2C3BCCBE00DB76B4 /* UtilsTemp.swift in Sources */, @@ -1553,6 +1552,7 @@ DE9E18892C3BC91000DB76B4 /* ResponseBodyDTO.swift in Sources */, DD931B6B2C3D9EBB00526452 /* ReadyStatusView.swift in Sources */, DD3976682C41769400E2A4C4 /* CreateMeetingViewModel.swift in Sources */, + A3DD9C622C455E3300E58A13 /* MeetingListService.swift in Sources */, A3DD9C3D2C41BAD000E58A13 /* MeetingTableViewCell.swift in Sources */, DD39766B2C41995A00E2A4C4 /* FinishCreateNavigationView.swift in Sources */, DD3072202C3C0D4500416D9F /* MyReadyStatusResponseModel.swift in Sources */, diff --git a/KkuMulKum.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/KkuMulKum.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 69ed5788..bdd12205 100644 --- a/KkuMulKum.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/KkuMulKum.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,4 +1,5 @@ { + "originHash" : "6f65ada45f770fae6123df6430e807e91049442b2f17b5aa0f91df3077eedc5a", "pins" : [ { "identity" : "abseil-cpp-binary", @@ -174,7 +175,7 @@ { "identity" : "rxswift", "kind" : "remoteSourceControl", - "location" : "https://github.com/ReactiveX/RxSwift", + "location" : "https://github.com/ReactiveX/RxSwift.git", "state" : { "revision" : "b06a8c8596e4c3e8e7788e08e720e3248563ce6a", "version" : "6.7.1" @@ -217,5 +218,5 @@ } } ], - "version" : 2 + "version" : 3 } diff --git a/KkuMulKum/Network/DTO/Model/Meetings/RegisterMeetingsResponseModel.swift b/KkuMulKum/Network/DTO/Model/Meetings/RegisterMeetingsResquestModel.swift similarity index 100% rename from KkuMulKum/Network/DTO/Model/Meetings/RegisterMeetingsResponseModel.swift rename to KkuMulKum/Network/DTO/Model/Meetings/RegisterMeetingsResquestModel.swift diff --git a/KkuMulKum/Resource/Service/MeetingListService.swift b/KkuMulKum/Resource/Service/MeetingListService.swift new file mode 100644 index 00000000..65326662 --- /dev/null +++ b/KkuMulKum/Resource/Service/MeetingListService.swift @@ -0,0 +1,29 @@ +// +// MeetingListService.swift +// KkuMulKum +// +// Created by 예삐 on 7/15/24. +// + +import Foundation + +protocol MeetingListServiceType { + func fetchMeetingList() -> MeetingListModel? +} + +final class MockMeetingListService: MeetingListServiceType { + func fetchMeetingList() -> MeetingListModel? { + let mockData = MeetingListModel( + count: 6, + meetings: [ + Meeting(id: 1, name: "꾸물이들", memberCount: 14), + Meeting(id: 2, name: "아요레디", memberCount: 28), + Meeting(id: 3, name: "안드가자", memberCount: 26), + Meeting(id: 4, name: "난이서버", memberCount: 30), + Meeting(id: 5, name: "캔디팟", memberCount: 24), + Meeting(id: 6, name: "열기팟", memberCount: 24) + ] + ) + return mockData + } +} diff --git a/KkuMulKum/Source/Core/MainTabBarController.swift b/KkuMulKum/Source/Core/MainTabBarController.swift index ff5f7b67..48378ae5 100644 --- a/KkuMulKum/Source/Core/MainTabBarController.swift +++ b/KkuMulKum/Source/Core/MainTabBarController.swift @@ -29,7 +29,10 @@ final class MainTabBarController: UITabBarController { $0.tabBarItem.image = .iconHome } - let meetingListViewController: MeetingListViewController = MeetingListViewController().then { + let meetingListViewController = MeetingListViewController( + viewModel: MeetingListViewModel( + service: MockMeetingListService() + )).then { $0.tabBarItem.title = "내 모임" $0.tabBarItem.image = .iconGroup } diff --git a/KkuMulKum/Source/Home/Cell/UpcomingPromiseCollecitonViewCell.swift b/KkuMulKum/Source/Home/View/UpcomingPromiseCollecitonViewCell.swift similarity index 100% rename from KkuMulKum/Source/Home/Cell/UpcomingPromiseCollecitonViewCell.swift rename to KkuMulKum/Source/Home/View/UpcomingPromiseCollecitonViewCell.swift diff --git a/KkuMulKum/Source/MeetingList/Model/MeetingDummyModel.swift b/KkuMulKum/Source/MeetingList/Model/MeetingDummyModel.swift deleted file mode 100644 index ccf915a9..00000000 --- a/KkuMulKum/Source/MeetingList/Model/MeetingDummyModel.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// MeetingListModel.swift -// KkuMulKum -// -// Created by 예삐 on 7/12/24. -// - -import UIKit - -struct MeetingDummyModel { - let name: String - let count: Int -} - -extension MeetingDummyModel { - static func dummy() -> [MeetingDummyModel] { - return [ - MeetingDummyModel(name: "꾸물이들", count: 14), - MeetingDummyModel(name: "꾸물이들", count: 14), - MeetingDummyModel(name: "꾸물이들", count: 14), - MeetingDummyModel(name: "꾸물이들", count: 14), - MeetingDummyModel(name: "꾸물이들", count: 14), - MeetingDummyModel(name: "꾸물이들", count: 14), - MeetingDummyModel(name: "꾸물이들", count: 14), - MeetingDummyModel(name: "꾸물이들", count: 14), - MeetingDummyModel(name: "꾸물이들", count: 14) - ] - } -} diff --git a/KkuMulKum/Source/MeetingList/View/MeetingListView.swift b/KkuMulKum/Source/MeetingList/View/MeetingListView.swift index bbdf5438..0f1f3486 100644 --- a/KkuMulKum/Source/MeetingList/View/MeetingListView.swift +++ b/KkuMulKum/Source/MeetingList/View/MeetingListView.swift @@ -17,9 +17,7 @@ final class MeetingListView: BaseView { private let header = UIView() - private let infoLabel = UILabel().then { - $0.setText("꾸물리안이 가입한 모임은\n총 3개예요!", style: .head01, color: .gray8) - } + let infoLabel = UILabel() let addButton = UIButton().then { $0.backgroundColor = .green2 @@ -65,7 +63,7 @@ final class MeetingListView: BaseView { } addButton.snp.makeConstraints { - $0.top.equalTo(infoLabel.snp.bottom).offset(16) + $0.top.equalTo(infoLabel.snp.bottom).offset(24) $0.leading.trailing.equalToSuperview() $0.height.equalTo(Screen.height(48)) } @@ -83,7 +81,7 @@ final class MeetingListView: BaseView { header.snp.makeConstraints { $0.top.equalToSuperview() $0.width.equalTo(UIScreen.main.bounds.width-40) - $0.height.equalTo(Screen.height(170)) + $0.height.equalTo(Screen.height(174)) } } } diff --git a/KkuMulKum/Source/MeetingList/Cell/MeetingTableViewCell.swift b/KkuMulKum/Source/MeetingList/View/MeetingTableViewCell.swift similarity index 88% rename from KkuMulKum/Source/MeetingList/Cell/MeetingTableViewCell.swift rename to KkuMulKum/Source/MeetingList/View/MeetingTableViewCell.swift index 49204ac7..c44a851a 100644 --- a/KkuMulKum/Source/MeetingList/Cell/MeetingTableViewCell.swift +++ b/KkuMulKum/Source/MeetingList/View/MeetingTableViewCell.swift @@ -38,7 +38,7 @@ final class MeetingTableViewCell: BaseTableViewCell { override func setupAutoLayout() { cellView.snp.makeConstraints { $0.top.leading.trailing.equalToSuperview() - $0.height.equalTo(76) + $0.height.equalTo(Screen.height(76)) } nameLabel.snp.makeConstraints { @@ -62,8 +62,8 @@ final class MeetingTableViewCell: BaseTableViewCell { // MARK: - Data Bind extension MeetingTableViewCell { - func dataBind(_ contentData: MeetingDummyModel) { + func dataBind(_ contentData: Meeting) { nameLabel.setText(contentData.name, style: .body03, color: .gray8) - countLabel.setText("\(contentData.count)명 참여 중", style: .caption02, color: .gray5) + countLabel.setText("\(contentData.memberCount)명 참여 중", style: .caption02, color: .gray5) } } diff --git a/KkuMulKum/Source/MeetingList/ViewController/MeetingListViewController.swift b/KkuMulKum/Source/MeetingList/ViewController/MeetingListViewController.swift index 9370527c..b20c9c14 100644 --- a/KkuMulKum/Source/MeetingList/ViewController/MeetingListViewController.swift +++ b/KkuMulKum/Source/MeetingList/ViewController/MeetingListViewController.swift @@ -15,11 +15,24 @@ class MeetingListViewController: BaseViewController { // MARK: - Property private let rootView = MeetingListView() - private let viewModel = MeetingListViewModel() + + private let viewModel: MeetingListViewModel // MARK: - Initializer + init(viewModel: MeetingListViewModel) { + self.viewModel = viewModel + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + + // MARK: - LifeCycle + override func loadView() { self.view = rootView } @@ -32,7 +45,7 @@ class MeetingListViewController: BaseViewController { register() updateMeetingList() - viewModel.dummy() + viewModel.requestMeetingList() } @@ -49,31 +62,49 @@ class MeetingListViewController: BaseViewController { rootView.tableView.dataSource = self } + private func updateInfoLabel() { + + } + private func updateMeetingList() { - viewModel.meetingListData.bind { [weak self] _ in + viewModel.meetingList.bind { [weak self] _ in DispatchQueue.main.async { self?.rootView.tableView.reloadData() + self?.rootView.infoLabel.setText( + "꾸물리안이 가입한 모임은\n총 \(self?.viewModel.meetingList.value?.count ?? 0)개예요!", + style: .head01, + color: .gray8 + ) } } } } + +// MARK: - UITableViewDelegate + extension MeetingListViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return Screen.height(88) } } + +// MARK: - UITableViewDataSource + extension MeetingListViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return viewModel.meetingListData.value.count + return viewModel.meetingList.value?.count ?? 0 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = rootView.tableView.dequeueReusableCell( withIdentifier: MeetingTableViewCell.reuseIdentifier, for: indexPath ) as? MeetingTableViewCell else { return UITableViewCell() } - cell.dataBind(viewModel.meetingListData.value[indexPath.item]) + if let data = viewModel.meetingList.value?.meetings[indexPath.item] { + cell.dataBind(data) + } + //cell.dataBind(viewModel.meetingList.value?[indexPath.item]) cell.selectionStyle = .none return cell } diff --git a/KkuMulKum/Source/MeetingList/ViewModel/MeetingListViewModel.swift b/KkuMulKum/Source/MeetingList/ViewModel/MeetingListViewModel.swift index fb2d90d3..920ea0f4 100644 --- a/KkuMulKum/Source/MeetingList/ViewModel/MeetingListViewModel.swift +++ b/KkuMulKum/Source/MeetingList/ViewModel/MeetingListViewModel.swift @@ -10,14 +10,15 @@ import UIKit import Then final class MeetingListViewModel { - var meetingListData = ObservablePattern<[MeetingDummyModel]>([]) + var meetingList = ObservablePattern(nil) - /// 더미 함수 이후에 삭제 - func dummy() { - meetingListData.value = MeetingDummyModel.dummy() + private let service: MeetingListServiceType + + init(service: MeetingListServiceType) { + self.service = service } - func updateContentData(newData: [MeetingDummyModel]) { - meetingListData.value = newData + func requestMeetingList() { + meetingList.value = service.fetchMeetingList() } }