【问题标题】:How to check for connection on the network on IOS app? [closed]如何在 IOS 应用程序上检查网络连接? [关闭]
【发布时间】:2021-09-29 01:59:17
【问题描述】:

我正在用 SWIFT 和 SWIFT UI 编写一个 IOS 应用程序。我有一个购买按钮来完成交易,但是除非手机连接到网络,否则应用程序将崩溃。我想要做的是在购买过程开始之前检查手机是否连接到网络。如何检查 iPhone 是否连接到网络?谢谢。

【问题讨论】:

  • 预检并不是真正的解决方案;网络可以随时关闭,包括在您完成网络连接检查后的纳秒内。虽然您可能希望检查连接性以为用户提供指导,但它不能替代正确的错误处理。您的应用不应因为网络中断而崩溃

标签: ios swift networking swiftui


【解决方案1】:

您可以使用NWPathMonitor 来监控您的网络连接,并为它提供一个更新状态变量的处理程序,然后您可以签入您的 Swift 或 SwiftUI 代码。

NWPathMonitor 有一些配置选项,比如需要 Wifi over 蜂窝选项,它触发的事件可以检查手机是否在低数据模式下运行等。但是一个非常基本和粗略的实现可能看起来像:

import Foundation
import Network

class NetworkChecker: ObservableObject {
  @Published var available = false

  private var pathMonitor: NWPathMonitor

  init() {
    pathMonitor = NWPathMonitor()
    pathMonitor.pathUpdateHandler = { path in
      DispatchQueue.main.async {
        self.available = path.status == .satisfied
      }
    }
    pathMonitor.start(queue: DispatchQueue.global(qos: .background))
  }
}

通过将其设为ObservableObject,您可以将其添加为应用根级别的环境对象,以便在您需要的任何视图中使用它:

@main
struct MyApp: App {
  @StateObject var networkChecker = NetworkChecker()

  var body: some Scene {
    WindowGroup {
      ContentView()
        .environmentObject(networkChecker)
    }
  }
}

struct ContentView: View {
  @EnvironmentObject var networkChecker: NetworkChecker

  var body: some View {
    Text(networkChecker.available ? "Online" : "Offline")
      .padding()
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多