gpt4 book ai didi

iOS13 立即检查互联网连接

转载 作者:行者123 更新时间:2023-11-29 05:15:20 24 4
gpt4 key购买 nike


我声明我对 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com