ContentView.swift
// // ContentView.swift // Test // // Created by Cairocoders // import SwiftUI struct ContentView: View { @ObservedObject var monitor = NetworkMonitor() @State private var showAlertSheet = false var body: some View { VStack { Image(systemName: monitor.isConnected ? "wifi" : "wifi.slash") .font(.system(size: 56)) Text(monitor.isConnected ? "Connected!" : "Not connected!") .padding() Button("Perform Network Request") { self.showAlertSheet = true } } .alert(isPresented: $showAlertSheet, content: { if monitor.isConnected { return Alert(title: Text("Success!"), message: Text("The network request can be performed"), dismissButton: .default(Text("OK"))) } return Alert(title: Text("No Internet Connection"), message: Text("Please enable Wifi or Celluar data"), dismissButton: .default(Text("Cancel"))) }) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }NetworkMonitor.swift
// // NetworkMonitor.swift // Test // // Created by Cairocoders // import Foundation import Network final class NetworkMonitor: ObservableObject { let monitor = NWPathMonitor() let queue = DispatchQueue(label: "Monitor") @Published var isConnected = true init() { monitor.pathUpdateHandler = { [weak self] path in DispatchQueue.main.async { self?.isConnected = path.status == .satisfied ? true : false } } monitor.start(queue: queue) } }