Skip to content

Commit df90832

Browse files
committed
fix: RootViewModel 구독 중복 방지
1 parent 878c6b6 commit df90832

1 file changed

Lines changed: 27 additions & 5 deletions

File tree

Application/DevLogPresentation/Sources/Root/RootViewModel.swift

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,17 @@ final class RootViewModel: StorePattern {
3232

3333
enum SideEffect {
3434
case clearApplicationBadgeCount
35+
case observeNetworkConnectivity
36+
case observeSession
37+
case observeTheme
3538
case trackLoginScreen
3639
}
3740

3841
private(set) var state: State
3942
private var cancellables = Set<AnyCancellable>()
43+
private var isObservingNetworkConnectivity = false
44+
private var isObservingSession = false
45+
private var isObservingTheme = false
4046
private let sessionUseCase: ObserveAuthSessionUseCase
4147
private let networkConnectivityUseCase: ObserveNetworkConnectivityUseCase
4248
private let systemThemeUseCase: ObserveSystemThemeUseCase
@@ -53,10 +59,6 @@ final class RootViewModel: StorePattern {
5359
self.systemThemeUseCase = systemThemeUseCase
5460
self.trackAnalyticsEventUseCase = trackAnalyticsEventUseCase
5561
self.state = State()
56-
57-
setupNetworkObserving()
58-
setupSessionObserving()
59-
setupThemeObserving()
6062
}
6163

6264
func reduce(with action: Action) -> [SideEffect] {
@@ -65,7 +67,12 @@ final class RootViewModel: StorePattern {
6567

6668
switch action {
6769
case .onAppear:
68-
effects = [.clearApplicationBadgeCount]
70+
effects = [
71+
.clearApplicationBadgeCount,
72+
.observeNetworkConnectivity,
73+
.observeSession,
74+
.observeTheme
75+
]
6976
case .setAlert(let isPresented):
7077
setAlert(&state, isPresented: isPresented)
7178
case .networkStatusChanged(let isConnected):
@@ -91,6 +98,12 @@ final class RootViewModel: StorePattern {
9198
switch effect {
9299
case .clearApplicationBadgeCount:
93100
UNUserNotificationCenter.current().setBadgeCount(0) { _ in }
101+
case .observeNetworkConnectivity:
102+
setupNetworkObserving()
103+
case .observeSession:
104+
setupSessionObserving()
105+
case .observeTheme:
106+
setupThemeObserving()
94107
case .trackLoginScreen:
95108
trackAnalyticsEventUseCase.execute(.screenView("login"))
96109
}
@@ -109,6 +122,9 @@ private extension RootViewModel {
109122
}
110123

111124
func setupNetworkObserving() {
125+
guard !isObservingNetworkConnectivity else { return }
126+
isObservingNetworkConnectivity = true
127+
112128
networkConnectivityUseCase.observe()
113129
.receive(on: DispatchQueue.main)
114130
.sink { [weak self] isConnected in
@@ -118,6 +134,9 @@ private extension RootViewModel {
118134
}
119135

120136
func setupSessionObserving() {
137+
guard !isObservingSession else { return }
138+
isObservingSession = true
139+
121140
sessionUseCase.observe()
122141
.removeDuplicates()
123142
.receive(on: DispatchQueue.main)
@@ -128,6 +147,9 @@ private extension RootViewModel {
128147
}
129148

130149
func setupThemeObserving() {
150+
guard !isObservingTheme else { return }
151+
isObservingTheme = true
152+
131153
systemThemeUseCase.observe()
132154
.removeDuplicates()
133155
.receive(on: DispatchQueue.main)

0 commit comments

Comments
 (0)