@@ -33,6 +33,8 @@ final class MyPageViewController: BaseViewController {
33
33
34
34
private let myProvider = MoyaProvider < MyRouter > ( plugins: [ MoyaLoggingPlugin ( ) ] )
35
35
private var nickName = " "
36
+ private var switchState = false
37
+ private let userDefaultsKey = TextLiteral . MyPage. pushNotificationUserSettingKey
36
38
private let myPageTableLabelList = MyPageLocalData . myPageTableLabelList
37
39
38
40
// MARK: - UI Components
@@ -44,14 +46,15 @@ final class MyPageViewController: BaseViewController {
44
46
override func viewDidLoad( ) {
45
47
super. viewDidLoad ( )
46
48
47
- setDelegate ( )
48
- Analytics . logEvent ( " MypageViewControllerLoad " , parameters: nil )
49
+ Analytics . logEvent ( " MypageViewControllerLoad " , parameters: nil )
50
+ setTableViewDelegate ( )
51
+ loadSwitchStateFromUserDefaults ( )
49
52
}
50
53
51
54
override func viewWillAppear( _ animated: Bool ) {
52
55
super. viewWillAppear ( animated)
53
56
54
- nickName = UserInfoManager . shared. getCurrentUserInfo ( ) ? . nickname ?? " fail "
57
+ nickName = UserInfoManager . shared. getCurrentUserInfo ( ) ? . nickname ?? " 실패 "
55
58
mypageView. setUserInfo ( nickname: nickName)
56
59
}
57
60
@@ -79,28 +82,20 @@ final class MyPageViewController: BaseViewController {
79
82
action: #selector( didTappedChangeNicknameButton) ,
80
83
for: . touchUpInside)
81
84
}
82
-
83
- @objc
84
- func toggleSwitchTapped( ) {
85
-
86
- }
87
85
88
86
@objc
89
- func didTappedChangeNicknameButton( ) {
90
-
87
+ private func didTappedChangeNicknameButton( ) {
91
88
let setNickNameVC = SetNickNameViewController ( )
92
89
self . navigationController? . pushViewController ( setNickNameVC, animated: true )
93
90
}
94
91
95
- func setDelegate( ) {
92
+ /// TableViewDelegate & DataSource를 해당 클래스로 할당합니다.
93
+ private func setTableViewDelegate( ) {
96
94
mypageView. myPageTableView. dataSource = self
97
95
mypageView. myPageTableView. delegate = self
98
96
}
99
97
100
- /*
101
- 해야 할 일
102
- - 알림 팝업을 띄우는 코드를 모듈화
103
- */
98
+ /// 로그아웃 Alert를 스크린에 표시하는 메소드
104
99
private func logoutShowAlert( ) {
105
100
let alert = UIAlertController ( title: " 로그아웃 " ,
106
101
message: " 정말 로그아웃 하시겠습니까? " ,
@@ -128,6 +123,18 @@ final class MyPageViewController: BaseViewController {
128
123
129
124
present ( alert, animated: true , completion: nil )
130
125
}
126
+
127
+ /// UserDefaults에 스위치 상태 저장
128
+ private func saveSwitchStateToUserDefaults( ) {
129
+ print ( " 사용자 푸시 알림 값을 앱 저장소에 보관합니다. " )
130
+ UserDefaults . standard. set ( switchState, forKey: userDefaultsKey)
131
+ }
132
+
133
+ /// UserDefaults에서 스위치 상태 불러오기
134
+ private func loadSwitchStateFromUserDefaults( ) {
135
+ print ( " 사용자 푸시 알림 값을 앱 저장소에서 불러옵니다. " )
136
+ switchState = UserDefaults . standard. bool ( forKey: userDefaultsKey)
137
+ }
131
138
}
132
139
133
140
// MARK: - TableView DataSource
@@ -145,7 +152,7 @@ extension MyPageViewController: UITableViewDataSource {
145
152
withIdentifier: NotificationSettingTableViewCell . identifier,
146
153
for: indexPath) as! NotificationSettingTableViewCell
147
154
148
- cell. toggleSwitch. addTarget ( self , action : #selector ( toggleSwitchTapped ) , for : . valueChanged )
155
+ cell. toggleSwitch. isOn = switchState
149
156
150
157
return cell
151
158
} else {
@@ -173,6 +180,7 @@ extension MyPageViewController: UITableViewDelegate {
173
180
tableView. deselectRow ( at: indexPath, animated: true )
174
181
175
182
switch indexPath. row {
183
+
176
184
// "내가 쓴 리뷰" 스크린으로 이동
177
185
case MyPageLabels . MyReview. rawValue:
178
186
let myReviewViewController = MyReviewViewController ( )
@@ -181,8 +189,24 @@ extension MyPageViewController: UITableViewDelegate {
181
189
// "푸시 알림 설정" 스위치 토글
182
190
case MyPageLabels . NotificationSetting. rawValue:
183
191
if let cell = tableView. cellForRow ( at: indexPath) as? NotificationSettingTableViewCell {
184
- // TODO: 스위치 값을 앱 저장소에 보관하고, 값에 따라 알림을 보내는 여부를 제어하는 코드를 설계할 것
185
- cell. toggleSwitch. isOn. toggle ( )
192
+
193
+ // 현재 스위치 상태를 반전
194
+ let newSwitchState = !switchState
195
+ cell. toggleSwitch. setOn ( newSwitchState, animated: true )
196
+
197
+ // 스위치 상태를 업데이트
198
+ switchState = newSwitchState
199
+
200
+ if switchState {
201
+ print ( " 푸시 알림을 발송합니다. " )
202
+ NotificationManager . shared. scheduleWeekday11AMNotification ( )
203
+ } else {
204
+ print ( " 푸시 알림을 발송하지 않습니다. " )
205
+ NotificationManager . shared. cancelWeekday11AMNotification ( )
206
+ }
207
+
208
+ // UserDefaults에 상태 저장
209
+ saveSwitchStateToUserDefaults ( )
186
210
}
187
211
188
212
// "문의하기" 스크린으로 이동
0 commit comments