import Foundation import Network import Observation @Observable @MainActor final class NetworkMonitor { var isOnline: Bool = true private let monitor = NWPathMonitor() private let queue = DispatchQueue(label: "NetworkMonitor") func start(onChange: @escaping @MainActor (Bool) -> Void) { monitor.pathUpdateHandler = { [weak self] path in let online = path.status == .satisfied Task { @MainActor [weak self] in guard let self else { return } let previous = self.isOnline self.isOnline = online if previous != online { onChange(online) } } } monitor.start(queue: queue) } func stop() { monitor.cancel() } }