func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
......
NetstatManager.shared.NetworkStatusListener()
return true
}
import Foundation
import Reachability
class NetstatManager: UIViewController {
/// 单例
static let shared = NetstatManager()
// Reachability必须一直存在,所以需要设置为全局变量
let reachability = try! Reachability()
lazy var netAlert: NetstatAlertVC = {
let alert = NetstatAlertVC()
alert.modalPresentationStyle = .overCurrentContext
alert.modalTransitionStyle = .coverVertical
return alert
}()
// 移除消息通知
deinit {
// 关闭网络状态消息监听
reachability.stopNotifier()
// 移除网络状态消息通知
NotificationCenter.default.removeObserver(self, name: Notification.Name.reachabilityChanged, object: reachability)
}
override func viewDidLoad() {
super.viewDidLoad()
// NetworkStatusListener()
}
}
extension NetstatManager {
/***** 网络状态监听部分(开始) *****/
func NetworkStatusListener() {
// 1、设置网络状态消息监听 2、获得网络Reachability对象
NotificationCenter.default.addObserver(self, selector: #selector(self.reachabilityChanged),name: Notification.Name.reachabilityChanged,object: reachability)
do{
// 3、开启网络状态消息监听
try reachability.startNotifier()
}catch{
print("could not start reachability notifier")
}
}
// 主动检测网络状态
@objc func reachabilityChanged(note: NSNotification) {
let reachability = note.object as! Reachability
if reachability.isReachable { // 判断网络连接状态
if reachability.isReachableViaWiFi {
print("连接类型:WiFi")
} else {
print("连接类型:移动网络")
}
self.netAlert.dismiss(animated: false, completion: nil)
} else {
print("网络连接:不可用")
self.alert_noNetwrok()
}
}
// 警告框,提示没有连接网络
func alert_noNetwrok() -> Void {
UIApplication.shared.keyWindow?.rootViewController?.present(self.netAlert, animated: false, completion: nil)
}
}
import UIKit
class NetstatAlertVC: UIViewController {
@IBOutlet weak var sureBut: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
/// 确认
@IBAction func confirmBtnClick(_ sender: Any) {
}
}
示意图: