【问题标题】:ObservableObject with NWPathMonitor带有 NWPathMonitor 的 ObservableObject
【发布时间】:2020-08-20 20:37:05
【问题描述】:

我尝试让 NWPathMonitor 成为一个可观察对象,如果有网络连接则返回 true,否则返回 false。

你能帮我吗,因为我的解决方案不起作用。

谢谢

import Foundation
import Network

class TestNetStatus: ObservableObject {

    let monitor = NWPathMonitor()
    let queue = DispatchQueue.global(qos: .background)

    @Published var connected: Bool = false
    private var isConnected: Bool = false

    init() {
        monitor.start(queue: queue)

        monitor.pathUpdateHandler = { path in
            if path.status == .satisfied {
                self.isConnected = true
            } else {
                self.isConnected = false
            }
        }

        self.connected = isConnected
    }
}

【问题讨论】:

    标签: swiftui observableobject


    【解决方案1】:

    你必须在主线程上设置发布的变量

    class TestNetStatus: ObservableObject {
    
        let monitor = NWPathMonitor()
        let queue = DispatchQueue.global(qos: .background)
    
        @Published var connected: Bool = false
        private var isConnected: Bool = false
    
        init() {
            monitor.start(queue: queue)
    
            monitor.pathUpdateHandler = { path in
                if path.status == .satisfied {
                    OperationQueue.main.addOperation {
                        self.isConnected = true
                        self.connected = self.isConnected
                    }
                } else {
                    OperationQueue.main.addOperation {
                        self.isConnected = false
                        self.connected = self.isConnected
                    }            }
            }
        }
    }
    
    struct ContentView: View {
    
        @EnvironmentObject var data  : TestNetStatus
    
        var body: some View {
            VStack {
                Text ("Status")
                Text(data.connected ? "Connected" : "not connected")
            }
        }
    }
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView().environmentObject(TestNetStatus())
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-13
      • 2021-02-27
      • 2020-12-15
      • 1970-01-01
      • 2021-11-03
      • 1970-01-01
      • 2020-10-25
      相关资源
      最近更新 更多