本文共 4125 字,大约阅读时间需要 13 分钟。
网络状态Alamofire、Reachability.h都可以实现
根据状态栏实现网络监测
ios13开始要在capability中开启Access Wifi info
==============//Alamofire监控网络
//Alamofire监控网络,只能调用一次监听一次class func AlamofiremonitorNet() {var manager: NetworkReachabilityManager?manager = NetworkReachabilityManager(host: "www.apple.com")manager?.startListening { status in print("网络状态: \(status)") if status == .reachable(.ethernetOrWiFi) { //WIFI print("wifi") } else if status == .reachable(.cellular) { // 蜂窝网络 print("4G") } else if status == .notReachable { // 无网络 print("无网络") } else { // 其他 }}}
Reachability 监控网络 https://github.com/tonymillion/Reachability---需要桥接
https://github.com/tonymillion/Reachability和Reachability.swift(ios12不可用)不是同一个,
这里需要在桥接文件中加入#import "Reachability.h"
//实时监听网络状态/* 这个每次调用都可以监测, 从有网到无网,状态改变可以监测到,但是从无网到有网不能监测。需要重新调用。 使用中可以做一个标记,如果标记是有网true,就不调用下面的方法,如果标记是无网false就调用下面的方法,如果判断是有网的,改变标记为true,否则标记为false */ // let reach = Reachability.forInternetConnection() let reach = Reachability.init(hostName: "www.baidu.com") reach?.reachableBlock = { reachabilty in print("有网络\(String(describing: reachabilty))") if (reachabilty?.isReachableViaWiFi())!{ print("wifi") }else if (reachabilty?.isReachableViaWWAN())!{ print("4G") }else { print("无网络") } } reach?.unreachableBlock = { reachabilty in print("无网络\(String(describing: reachabilty))") } reach?.startNotifier()
直接检测一次网络*****
let reach = Reachability.forInternetConnection() if (reach?.isReachableViaWiFi())!{ print("wifi") }else if (reach?.isReachableViaWWAN())!{ print("4G") }else { print("无网络") }
通知的方式监测网络状态*********不起作用
//通知监听网络---这个没起作用 func notificationMonitorNetwork(){ // let reach = Reachability.init(hostName: "www.baidu.com") let reach = Reachability.forInternetConnection() NotificationCenter.default.addObserver(self, selector: #selector(rechChange), name: NSNotification.Name.init(rawValue: "reachabilityChanged"), object: nil) reach?.startNotifier() } @objc func rechChange(note: NSNotification) { print("检测网络") let reach = note.object as! Reachability // 准备获取网络连接信息 if reach.isReachableViaWiFi() || reach.isReachableViaWWAN() { print("有网络") } else { print("没有网络") } }
================Reachability.swift监控网络,目前ios12不能用
下载地址https://github.com/ashleymills/Reachability.swift
使用版本:iOS (8.0 - 12.0), OSX (10.9 - 10.14) and tvOS (9.0 - 12.0)
//Reachability.swift监听网络,以闭包的方式 class func reachabilitymonitornetonce(){ let reachability = try! Reachability() reachability.whenReachable = { reachability in if reachability.connection == .wifi { print("Reachable via WiFi") } else { print("Reachable via Cellular") } } reachability.whenUnreachable = { _ in print("Not reachable") } do { try reachability.startNotifier() } catch { print("Unable to start notifier") } }
//Reachability.swift监听网络,以通知的方式//declare this inside of viewWillAppear class func reachabilitymonitornet(){ let reachability = try! Reachability()NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)), name: .reachabilityChanged, object: reachability) do{ try reachability.startNotifier() }catch{ print("could not start reachability notifier") } } @objc func reachabilityChanged(note: Notification) { let reachability = note.object as! Reachability switch reachability.connection { case .wifi: print("Reachable via WiFi") case .cellular: print("Reachable via Cellular") case .unavailable: print("Network not reachable") case .none: break } }
转载地址:http://mnmgi.baihongyu.com/