Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,7 @@ final class ObserveNetworkConnectivityUseCaseImpl: ObserveNetworkConnectivityUse

func observe() -> AnyPublisher<Bool, Never> {
repository.observeNetworkConnectivity()
.removeDuplicates()
.eraseToAnyPublisher()
}
}
9 changes: 4 additions & 5 deletions DevLog/Infra/Service/NWPathConnectivityProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,9 @@ import Combine
final class NWPathConnectivityProvider {
private let networkPathMonitor = NWPathMonitor()
private let monitoringQueue = DispatchQueue(label: "NWPathConnectivityProviderQueue")
private let isConnectedSubject = CurrentValueSubject<Bool, Never>(false)
private let isConnectedSubject = CurrentValueSubject<Bool?, Never>(nil)

init() {
let initialStatus = networkPathMonitor.currentPath.status == .satisfied
isConnectedSubject.send(initialStatus)

networkPathMonitor.pathUpdateHandler = { [weak self] path in
let connected = (path.status == .satisfied)
self?.isConnectedSubject.send(connected)
Expand All @@ -30,6 +27,8 @@ final class NWPathConnectivityProvider {
}

func observeNetworkConnectivity() -> AnyPublisher<Bool, Never> {
isConnectedSubject.eraseToAnyPublisher()
isConnectedSubject
.compactMap { $0 }
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

네트워크 연결 상태가 변경될 때만 이벤트를 방출하도록 removeDuplicates() 연산자를 추가하는 것을 고려해 보세요. pathUpdateHandler는 연결 상태(status)가 동일하더라도 다른 경로 속성(예: 사용 가능한 인터페이스 변경)이 변경될 때마다 호출될 수 있습니다. removeDuplicates()를 사용하면 불필요한 중복 true 또는 false 값의 전송을 막아 다운스트림 구독자의 부하를 줄일 수 있습니다.

Suggested change
.compactMap { $0 }
.compactMap { $0 }
.removeDuplicates()

.eraseToAnyPublisher()
}
}
1 change: 0 additions & 1 deletion DevLog/Presentation/ViewModel/HomeViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,6 @@ private extension HomeViewModel {

func setupNetworkObserving() {
networkConnectivityUseCase.observe()
.removeDuplicates()
.receive(on: DispatchQueue.main)
.sink { [weak self] isConnected in
self?.send(.networkStatusChanged(isConnected))
Expand Down
1 change: 0 additions & 1 deletion DevLog/Presentation/ViewModel/ProfileViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,6 @@ final class ProfileViewModel: Store {
extension ProfileViewModel {
private func setupNetworkObserving() {
networkConnectivityUseCase.observe()
.removeDuplicates()
.receive(on: DispatchQueue.main)
.sink { [weak self] isConnected in
self?.send(.networkStatusChanged(isConnected))
Expand Down
1 change: 0 additions & 1 deletion DevLog/Presentation/ViewModel/RootViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ private extension RootViewModel {

func setupNetworkObserving() {
networkConnectivityUseCase.observe()
.removeDuplicates()
.receive(on: DispatchQueue.main)
.sink { [weak self] isConnected in
self?.send(.networkStatusChanged(isConnected))
Expand Down
1 change: 0 additions & 1 deletion DevLog/Presentation/ViewModel/SettingViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,6 @@ private extension SettingViewModel {

func setupNetworkObserving() {
networkConnectivityUseCase.observe()
.removeDuplicates()
.receive(on: DispatchQueue.main)
.sink { [weak self] isConnected in
self?.send(.networkStatusChanged(isConnected))
Expand Down