【发布时间】:2021-07-30 22:39:00
【问题描述】:
所以我的观点是,如果出于某种原因用户无法访问我们的服务器,可能是因为:
- 网络问题
- 服务器中断
我需要它来显示这个视图。目前,如果它无法访问我们的服务器,我必须通过错误来执行此操作,但是我想在尝试我们的网站之前知道它们是连接的还是未连接的网络。
这个想法是一个弹出屏幕,在用户连接到 wifi 或接收到手机信号之前一直显示。
但是我已经尝试过这段代码:
import Network
import SwiftUI
// An enum to handle the network status
enum NetworkStatus: String {
case connected
case disconnected
}
class Monitor: ObservableObject {
private let monitor = NWPathMonitor()
private let queue = DispatchQueue(label: "Monitor")
@Published var status: NetworkStatus = .connected
init() {
monitor.pathUpdateHandler = { [weak self] path in
guard let self = self else { return }
// Monitor runs on a background thread so we need to publish
// on the main thread
DispatchQueue.main.async {
if path.status == .satisfied {
print("We're connected!")
self.status = .connected
} else {
print("No connection.")
self.status = .disconnected
}
}
}
monitor.start(queue: queue)
}
}
然后我在我的 SwiftUI 中添加了以下内容
struct ContentView: SwiftUI.View {
@EnvironmentObject var monitor: Monitor
init() {
}
var body: some SwiftUI.View {
HStack{
Text("HELLO WORLD")
}.onAppear{
print(monitor.status)
}
}
但是它使应用程序崩溃,并出现以下错误
SwiftUI:0: Fatal error: No ObservableObject of type Monitor found. A View.environmentObject(_:) for Monitor may be missing as an ancestor of this view.
【问题讨论】:
-
错误信息很明确,你设置环境对象了吗? hackingwithswift.com/quick-start/swiftui/…
-
但我做到了@EnvironmentObjec。
-
那只是一个指向环境对象的变量的声明。请参阅链接文章