我声明我对 Swift 和 iOS 总体来说还是个新手。
我想了解(在 viewDidLoad 中)如何立即检查 iPhone 是否已连接到互联网!
新的 NWPathMonitor() 类似乎仅适用于管理连接更改,但不适用于即时检查连接。
我的 View Controller
import UIKit
import WebKit
import Network
class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
// Status bar black characters
override var preferredStatusBarStyle: UIStatusBarStyle { return .darkContent }
// La nostra webview
var webView: WKWebView!
// NETWORK MONITORING
let monitor = NWPathMonitor()
let queue = DispatchQueue(label: "InternetConnectionMonitor")
var internetConnected = false
// 1 - Eseguita durante il caricamento della view
override func loadView() {
super.loadView()
// WEB VIEW
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
// NETWORK MONITORING
monitor.pathUpdateHandler = { path in
if path.status == .satisfied {
print("dedalos-print INTERNET OK 1")
if (!self.internetConnected) {
self.internetConnected = true
self.loadWebView()
}
}
else {
print("dedalos-print NO INTERNET 1")
self.internetConnected = false
self.loadHTMLerror()
}
}
monitor.start(queue: queue)
}
// 2 - Eseguita dopo il caricamento della view
override func viewDidLoad() {
super.viewDidLoad()
if (self.internetConnected) {
print("dedalos-print INTERNET OK 2")
self.loadWebView()
}
else {
print("dedalos-print NO INTERNET 2")
}
}
// 3 - Eseguita poco prima di mostrarsi
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
// 4 - Eseguita dopo essersi mostrata
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
}
}
提前致谢!
最佳答案
如果您不想使用第三方库。
创建NetworkCheck
类:
import Network
protocol NetworkCheckObserver: class {
func statusDidChange(status: NWPath.Status)
}
class NetworkCheck {
struct NetworkChangeObservation {
weak var observer: NetworkCheckObserver?
}
private var monitor = NWPathMonitor()
private static let _sharedInstance = NetworkCheck()
private var observations = [ObjectIdentifier: NetworkChangeObservation]()
var currentStatus: NWPath.Status {
get {
return monitor.currentPath.status
}
}
class func sharedInstance() -> NetworkCheck {
return _sharedInstance
}
init() {
monitor.pathUpdateHandler = { [unowned self] path in
for (id, observations) in self.observations {
//If any observer is nil, remove it from the list of observers
guard let observer = observations.observer else {
self.observations.removeValue(forKey: id)
continue
}
DispatchQueue.main.async(execute: {
observer.statusDidChange(status: path.status)
})
}
}
monitor.start(queue: DispatchQueue.global(qos: .background))
}
func addObserver(observer: NetworkCheckObserver) {
let id = ObjectIdentifier(observer)
observations[id] = NetworkChangeObservation(observer: observer)
}
func removeObserver(observer: NetworkCheckObserver) {
let id = ObjectIdentifier(observer)
observations.removeValue(forKey: id)
}
}
然后在您的ViewController
中您可以检查网络更改。
import Network
class ViewController: UIViewController,NetworkCheckObserver {
var networkCheck = NetworkCheck.sharedInstance()
override func viewDidLoad() {
super.viewDidLoad()
if networkCheck.currentStatus == .satisfied{
//Do something
}else{
//Show no network alert
}
networkCheck.addObserver(observer: self)
}
func statusDidChange(status: NWPath.Status) {
if status == .satisfied {
//Do something
}else if status == .unsatisfied {
//Show no network alert
}
}
}
关于iOS13 立即检查互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59245501/