73 lines
2.2 KiB
Swift
73 lines
2.2 KiB
Swift
//
|
|
// FANetworkMonitor.swift
|
|
// Fableon
|
|
//
|
|
// Created by 湖北秦九 on 2025/10/16.
|
|
//
|
|
|
|
import UIKit
|
|
import Network
|
|
|
|
class FANetworkMonitor {
|
|
static let manager = FANetworkMonitor()
|
|
|
|
///是否有网
|
|
private(set) var isReachable: Bool?
|
|
|
|
private(set) var connectionType: NWInterface.InterfaceType?
|
|
private(set) var status: NWPath.Status?
|
|
|
|
private let monitor = NWPathMonitor()
|
|
private let queue = DispatchQueue(label: "NetworkMonitorQueue")
|
|
|
|
func startMonitoring() {
|
|
|
|
monitor.pathUpdateHandler = { [weak self] path in
|
|
guard let self = self else { return }
|
|
self.status = path.status
|
|
|
|
if path.usesInterfaceType(.wifi) {
|
|
self.connectionType = .wifi
|
|
} else if path.usesInterfaceType(.cellular) {
|
|
self.connectionType = .cellular
|
|
} else if path.usesInterfaceType(.wiredEthernet) {
|
|
self.connectionType = .wiredEthernet
|
|
} else {
|
|
self.connectionType = nil
|
|
}
|
|
|
|
if path.status == .satisfied, self.connectionType != nil {
|
|
if self.isReachable == false {
|
|
self.isReachable = true
|
|
DispatchQueue.main.async {
|
|
NotificationCenter.default.post(name: FANetworkMonitor.networkStatusDidChangeNotification, object: nil)
|
|
}
|
|
} else {
|
|
self.isReachable = true
|
|
}
|
|
} else {
|
|
if self.isReachable == true {
|
|
self.isReachable = false
|
|
DispatchQueue.main.async {
|
|
NotificationCenter.default.post(name: FANetworkMonitor.networkStatusDidChangeNotification, object: nil)
|
|
}
|
|
} else {
|
|
self.isReachable = false
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
monitor.start(queue: queue)
|
|
}
|
|
|
|
func stopMonitoring() {
|
|
monitor.cancel()
|
|
}
|
|
}
|
|
|
|
extension FANetworkMonitor {
|
|
///网络发生变化
|
|
@objc static let networkStatusDidChangeNotification = NSNotification.Name(rawValue: "FANetworkMonitor.networkStatusDidChangeNotification")
|
|
}
|