ContentView.swift
//
// ContentView.swift
// SwiftUIProject
//
// Created by Cairocoders
//
import SwiftUI
struct ContentView: View {
@State private var isLoading = false
@State private var notconnected = false
@ObservedObject var monitor = NetworkMonitor()
var body: some View {
ZStack {
if notconnected {
VStack {
Image(systemName: monitor.isConnected ? "wifi" : "wifi.slash")
.font(.system(size: 56))
Text(monitor.isConnected ? "Connected!" : "Not connected!")
.padding()
}
}else {
Home()
}
if isLoading {
loadingView()
}
}
.onAppear {
startCheckNetworkCall()
}
}
func startCheckNetworkCall() {
isLoading = true
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
if monitor.isConnected {
isLoading = false
notconnected = false
print("Success")
}else{
isLoading = false
notconnected = true
print("not connected")
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct loadingView: View {
var body: some View {
ZStack {
Color(.systemBackground)
.ignoresSafeArea()
ProgressView()
.progressViewStyle(CircularProgressViewStyle(tint: .orange))
.scaleEffect(3)
}
}
}
Home.swift
//
// Home.swift
// SwiftUIProject
//
// Created by Cairocoders
//
import SwiftUI
struct Home: View {
var body: some View {
NavigationView {
VStack {
HStack(spacing: 16) {
Image("pic")
.resizable()
.scaledToFill()
.frame(width: 50, height: 50)
.clipped()
.cornerRadius(50)
.overlay(RoundedRectangle(cornerRadius: 44)
.stroke(Color(.label), lineWidth: 1)
)
.shadow(radius: 5)
VStack(alignment: .leading, spacing: 4) {
Text("cairocoders")
.font(.system(size: 24, weight: .bold))
HStack {
Circle()
.foregroundColor(.green)
.frame(width: 14, height: 14)
Text("online")
.font(.system(size: 12))
.foregroundColor(Color(.lightGray))
}
}
Spacer()
Button {
} label: {
Image(systemName: "gear")
.font(.system(size: 24, weight: .bold))
.foregroundColor(Color(.label))
}
}//End HStack
.padding()
ScrollView {
ForEach(1..<4){i in
Button(action: {
}) {
VStack {
HStack(spacing: 16) {
Image("photo\(i)")
.resizable()
.scaledToFill()
.frame(width: 50, height: 50)
.clipped()
.cornerRadius(50)
VStack(alignment: .leading) {
Text("User Name \(i)")
.font(.system(size: 16, weight: .bold))
Text("View Profile")
.font(.system(size: 14))
.foregroundColor(Color(.lightGray))
}
Spacer()
Text("22m")
.font(.system(size: 14, weight: .semibold))
}
Divider()
.padding(.vertical, 8)
}.padding(.horizontal)
}
}//End ForEach
.padding(.bottom, 50)
}// End scrollview
}
.navigationBarHidden(true)
}
}
}
struct Home_Previews: PreviewProvider {
static var previews: some View {
Home()
}
}
NetworkMonitor.swift
//
// NetworkMonitor.swift
// SwiftUIProject
//
// 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)
}
}