Skip to content

Commit e68064c

Browse files
feat(#35): 마이페이지 뷰-뷰컨 의존성 줄임
1 parent d2a9c03 commit e68064c

File tree

9 files changed

+67
-56
lines changed

9 files changed

+67
-56
lines changed

Where_Are_You.xcodeproj/project.pbxproj

+4-4
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
99C6D29E2C90379F009C0CF8 /* APIResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C6D29D2C90379F009C0CF8 /* APIResponseHandler.swift */; };
123123
99C6D2A02C903EAF009C0CF8 /* ScheduleRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C6D29F2C903EAF009C0CF8 /* ScheduleRepository.swift */; };
124124
99C6D2A32C904006009C0CF8 /* GetDDayScheduleUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C6D2A22C904006009C0CF8 /* GetDDayScheduleUseCase.swift */; };
125-
99C9B2292C0197CA008D7CBD /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C9B2282C0197CA008D7CBD /* User.swift */; };
125+
99C9B2292C0197CA008D7CBD /* Member.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C9B2282C0197CA008D7CBD /* Member.swift */; };
126126
99C9B22C2C019C67008D7CBD /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C9B22B2C019C67008D7CBD /* LoginView.swift */; };
127127
99C9B2322C01A45C008D7CBD /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C9B2312C01A45C008D7CBD /* Extensions.swift */; };
128128
99C9B23D2C01ACBE008D7CBD /* Ttangsbudaejjigae-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 99C9B23A2C01ACBE008D7CBD /* Ttangsbudaejjigae-Medium.otf */; };
@@ -373,7 +373,7 @@
373373
99C6D29D2C90379F009C0CF8 /* APIResponseHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIResponseHandler.swift; sourceTree = "<group>"; };
374374
99C6D29F2C903EAF009C0CF8 /* ScheduleRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScheduleRepository.swift; sourceTree = "<group>"; };
375375
99C6D2A22C904006009C0CF8 /* GetDDayScheduleUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetDDayScheduleUseCase.swift; sourceTree = "<group>"; };
376-
99C9B2282C0197CA008D7CBD /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = "<group>"; };
376+
99C9B2282C0197CA008D7CBD /* Member.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Member.swift; sourceTree = "<group>"; };
377377
99C9B22B2C019C67008D7CBD /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; };
378378
99C9B2312C01A45C008D7CBD /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
379379
99C9B23A2C01ACBE008D7CBD /* Ttangsbudaejjigae-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Ttangsbudaejjigae-Medium.otf"; sourceTree = "<group>"; };
@@ -1087,7 +1087,7 @@
10871087
99D11EB22C07836C006BE265 /* Entities */ = {
10881088
isa = PBXGroup;
10891089
children = (
1090-
99C9B2282C0197CA008D7CBD /* User.swift */,
1090+
99C9B2282C0197CA008D7CBD /* Member.swift */,
10911091
9911F9872C3F63D500D0FDC9 /* Feed.swift */,
10921092
99949F5A2C58B85E00AE0177 /* Friend.swift */,
10931093
D54C040B2C651832009CC419 /* Schedule.swift */,
@@ -1758,7 +1758,7 @@
17581758
9979622D2C3E6B2200E95CA6 /* AccountLoginUseCase.swift in Sources */,
17591759
990BDE532C40CF1E00A7FB5D /* DDayCell.swift in Sources */,
17601760
9911F98C2C3F908E00D0FDC9 /* HomeFeedView.swift in Sources */,
1761-
99C9B2292C0197CA008D7CBD /* User.swift in Sources */,
1761+
99C9B2292C0197CA008D7CBD /* Member.swift in Sources */,
17621762
99D780DE2C6066FA005A3F30 /* LoginResponse.swift in Sources */,
17631763
99949F452C58788200AE0177 /* FriendFeedViewController.swift in Sources */,
17641764
D593CCC82C82318F00A862FF /* ScheduleViewModel.swift in Sources */,

Where_Are_You/Data/Models/Responses/Member/MemberDetailsResponse.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ import Foundation
1010
struct MemberDetailsResponse: Codable {
1111
let userName: String
1212
let email: String
13-
let profileImage: String?
13+
let profileImage: String
1414
}
+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//
2+
// Member.swift
3+
// Where_Are_You
4+
//
5+
// Created by 오정석 on 25/5/2024.
6+
//
7+
8+
import UIKit
9+
10+
struct Member {
11+
var userName: String
12+
var profileImage: String
13+
var memberSeq: Int?
14+
var memberCode: String?
15+
}

Where_Are_You/Domain/Entities/User.swift

-15
This file was deleted.

Where_Are_You/Presentation/Main/FriendFeed/Feeds/ViewControllers/FeedsViewController.swift

+27-24
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,30 @@ import SwiftUI
1010

1111
class FeedsViewController: UIViewController {
1212
// MARK: - Properties
13-
private var feedsView: FeedsView?
14-
private var noFeedsView: NoDataView?
15-
var viewModel: FeedDetailViewModel!
13+
private var feedsView = FeedsView()
14+
private var noFeedsView = NoDataView()
15+
var viewModel: FeedViewModel!
1616
private var feedImagesViewController: FeedImagesViewController!
1717

1818
// MARK: - Lifecycle
1919
override func viewDidLoad() {
2020
super.viewDidLoad()
21+
print("FeedsViewController - viewDidLoad() called") // 확인 로그
22+
print("Is viewModel nil? \(viewModel == nil)") // viewModel nil 여부 확인
23+
2124
setupViewModel()
25+
print("Is viewModel nil after setupViewModel? \(viewModel == nil)") // viewModel 초기화 여부 확인
26+
2227
setupViews()
2328
setupTableView()
2429

2530
setupBindings()
2631

2732
updateViewVisibility()
2833
addFeedImagesViewController()
34+
35+
print("Calling fetchFeeds()")
36+
2937
viewModel.fetchFeeds()
3038
}
3139

@@ -34,13 +42,14 @@ class FeedsViewController: UIViewController {
3442
private func setupViewModel() {
3543
let feedService = FeedService()
3644
let feedRepository = FeedRepository(feedService: feedService)
37-
viewModel = FeedDetailViewModel(getFeedListUseCase: GetFeedListUseCaseImpl(feedRepository: feedRepository))
45+
viewModel = FeedViewModel(getFeedListUseCase: GetFeedListUseCaseImpl(feedRepository: feedRepository))
3846
}
3947

4048
private func setupBindings() {
4149
viewModel.onFeedsDataFetched = { [weak self] in
4250
DispatchQueue.main.async {
4351
self?.updateViewVisibility()
52+
self?.feedsView.feedsTableView.reloadData()
4453
}
4554
}
4655
}
@@ -62,29 +71,30 @@ class FeedsViewController: UIViewController {
6271
feedsView = FeedsView()
6372
noFeedsView = NoDataView()
6473

65-
view.addSubview(feedsView!)
66-
view.addSubview(noFeedsView!)
74+
view.addSubview(feedsView)
75+
view.addSubview(noFeedsView)
6776

68-
feedsView!.snp.makeConstraints { make in
77+
feedsView.snp.makeConstraints { make in
6978
make.edges.equalTo(view.safeAreaLayoutGuide)
7079
}
7180

72-
noFeedsView!.snp.makeConstraints { make in
81+
noFeedsView.snp.makeConstraints { make in
7382
make.edges.equalTo(view.safeAreaLayoutGuide)
7483
}
7584
}
7685

7786
private func setupTableView() {
78-
feedsView!.feedsTableView.delegate = self
79-
feedsView!.feedsTableView.dataSource = self
80-
feedsView!.feedsTableView.register(FeedsTableViewCell.self, forCellReuseIdentifier: FeedsTableViewCell.identifier)
81-
feedsView!.feedsTableView.reloadData()
87+
feedsView.feedsTableView.delegate = self
88+
feedsView.feedsTableView.dataSource = self
89+
feedsView.feedsTableView.register(FeedsTableViewCell.self, forCellReuseIdentifier: FeedsTableViewCell.identifier)
8290
}
8391

8492
private func updateViewVisibility() {
85-
let hasFeeds = !viewModel.feeds.isEmpty
86-
feedsView?.isHidden = !hasFeeds
87-
noFeedsView?.isHidden = hasFeeds
93+
let hasFeeds = !viewModel.displayFeedContent.isEmpty
94+
feedsView.isHidden = !hasFeeds
95+
// feedsView.isHidden = false
96+
// noFeedsView.isHidden = true
97+
noFeedsView.isHidden = hasFeeds
8898
}
8999
// private func addFeedsView() {
90100
// feedsView = FeedsView()
@@ -93,13 +103,6 @@ class FeedsViewController: UIViewController {
93103
// feedsView!.snp.makeConstraints { make in
94104
// make.edges.equalTo(view.safeAreaLayoutGuide)
95105
// }
96-
//
97-
// // 테이블 뷰 설정
98-
// feedsView!.feedsTableView.delegate = self
99-
// feedsView!.feedsTableView.dataSource = self
100-
// feedsView!.feedsTableView.register(FeedsTableViewCell.self, forCellReuseIdentifier: FeedsTableViewCell.identifier)
101-
// feedsView!.feedsTableView.reloadData()
102-
// }
103106
//
104107
// private func addNoFeedsView() {
105108
// noFeedsView = NoDataView()
@@ -123,14 +126,14 @@ class FeedsViewController: UIViewController {
123126

124127
extension FeedsViewController: UITableViewDelegate, UITableViewDataSource {
125128
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
126-
return viewModel.feeds.count
129+
return viewModel.displayFeedContent.count
127130
}
128131

129132
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
130133
guard let cell = tableView.dequeueReusableCell(withIdentifier: FeedsTableViewCell.identifier, for: indexPath) as? FeedsTableViewCell else {
131134
return UITableViewCell()
132135
}
133-
let feed = viewModel.feeds[indexPath.row]
136+
let feed = viewModel.displayFeedContent[indexPath.row]
134137
cell.configure(with: feed)
135138
return cell
136139
}

Where_Are_You/Presentation/Main/FriendFeed/Feeds/ViewModels/FeedViewModel.swift

+6
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,18 @@ class FeedViewModel {
3030

3131
// MARK: - Helpers
3232
func fetchFeeds() {
33+
print("fetchFeeds() called")
34+
3335
getFeedListUseCase.execute(page: page) { [weak self] result in
3436
guard let self = self else { return }
37+
print("fetchFeeds() - result received")
38+
3539
self.isLoading = false
3640

3741
switch result {
3842
case .success(let data):
43+
print("fetchFeeds() - success with data: \(data)")
44+
3945
self.rawFeedContent = data
4046
self.displayFeedContent = rawFeedContent.compactMap { feedContent in
4147
guard let scheduleFeedInfo = feedContent.scheduleFeedInfo.first else { return nil }

Where_Are_You/Presentation/Main/FriendFeed/FriendFeedViewController.swift

+1-6
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ class FriendFeedViewController: UIViewController {
8080
// MARK: - UI Setup
8181
private func setupUI() {
8282
view.backgroundColor = .white
83-
84-
let feedsView = FeedsView()
8583
// Add FeedsViewController
8684
addChild(feedsViewController)
8785
view.addSubview(feedsViewController.view)
@@ -97,6 +95,7 @@ class FriendFeedViewController: UIViewController {
9795
friendsHostingController.view.isHidden = true
9896
}
9997

98+
friendsHostingController?.view.isHidden = true
10099
// Setup navigation items
101100
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: segmentControl)
102101
navigationItem.rightBarButtonItem = UIBarButtonItem(customView: barButtonStack)
@@ -156,14 +155,10 @@ class FriendFeedViewController: UIViewController {
156155
feedsViewController.view.isHidden = false
157156
friendsHostingController?.view.isHidden = true
158157
searchFriendButton.isHidden = true
159-
notificationButton.isHidden = false
160-
addButton.isHidden = false
161158
} else {
162159
feedsViewController.view.isHidden = true
163160
friendsHostingController?.view.isHidden = false
164161
searchFriendButton.isHidden = false
165-
notificationButton.isHidden = false
166-
addButton.isHidden = false
167162
}
168163
}
169164

Where_Are_You/Presentation/Main/Mypage/ViewControllers/MyPageViewController.swift

+6-5
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,9 @@ class MyPageViewController: UIViewController {
3232
view = myPageView
3333
setupViewModel()
3434
setupActions()
35+
viewModel.memberDetails()
3536
setupBindings()
3637

37-
myPageView.userCodeLabel.text = UserDefaultsManager.shared.getMemberCode()
38-
viewModel.memberDetails()
3938
NotificationCenter.default.addObserver(self, selector: #selector(userNameDidChange), name: .userNameDidChange, object: nil)
4039
}
4140

@@ -67,9 +66,11 @@ class MyPageViewController: UIViewController {
6766

6867
viewModel.onGetMemberSuccess = { [weak self] memberDetails in
6968
DispatchQueue.main.async {
70-
self?.myPageView.userNameLabel.text = memberDetails.userName
71-
self?.userName = memberDetails.userName
72-
self?.email = memberDetails.email
69+
let memberCode = UserDefaultsManager.shared.getMemberCode()
70+
let member = Member(userName: memberDetails.userName,
71+
profileImage: memberDetails.profileImage,
72+
memberCode: memberCode)
73+
self?.myPageView.configureUI(member: member)
7374
}
7475
}
7576
}

Where_Are_You/Presentation/Main/Mypage/Views/MyPageView.swift

+7-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ class MyPageView: UIView {
112112
addSubview(separatorview)
113113
}
114114

115-
func setupConstraints() {
115+
private func setupConstraints() {
116116
// 유저프로필
117117
profileBackgroundView.snp.makeConstraints { make in
118118
make.top.leading.trailing.equalToSuperview()
@@ -243,4 +243,10 @@ class MyPageView: UIView {
243243
}
244244
}
245245
}
246+
247+
func configureUI(member: Member) {
248+
self.profileImageView.setImage(from: member.profileImage)
249+
self.userNameLabel.text = member.userName
250+
self.userCodeLabel.text = member.memberCode
251+
}
246252
}

0 commit comments

Comments
 (0)