【问题标题】:SwiftUI check if URL is reachable and switch to ContentView automaticlySwiftUI 检查 URL 是否可达并自动切换到 ContentView
【发布时间】:2021-04-22 13:42:18
【问题描述】:

我试过这个来检查连接状态:

func checkConnection() {
if let url = URL(string: "https://www.xxxxxxxxxxxxxxxxxxxxx") {
    var request = URLRequest(url: url)
    request.httpMethod = "HEAD"
    URLSession(configuration: .default)
      .dataTask(with: request) { (_, response, error) -> Void in
        guard error == nil else {
          print("Error:", error ?? "")
          return
        }

        guard (response as? HTTPURLResponse)?
          .statusCode == 200 else {
            print("down")

            return
        }

        print("up")

        
        
      }
      .resume()
  }
}

而且效果很好。它在控制台中显示“向上”或“向下”。我是 Xcode 和 SwiftUI 的初学者,所以我的问题是: 如果 URL 可以访问,我想自动转到“ContentView”而不是 print("up")。我尝试了 ContentView() 但它不起作用。

感谢您的帮助。

【问题讨论】:

  • 您能否展示一下您现在使用的视图以及checkConnection 是如何被调用的?

标签: swiftui connection func contentview


【解决方案1】:

这可以通过 NavigationLink 轻松处理。一种方法是执行以下操作。

添加绑定以保持视图处于活动状态时的状态。 添加导航链接以呈现您想要的视图。 检查您的条件返回真/假 如果条件为真,绑定状态将更新 NavigationLink 并呈现视图。

@State var isValidURL = false

//Body {...

NavigationLink(destination: ContentView(), isActive: isValidURL {}


func checkConnection() {
if let url = URL(string: "https://www.xxxxxxxxxxxxxxxxxxxxx") {
    var request = URLRequest(url: url)
    request.httpMethod = "HEAD"
    URLSession(configuration: .default)
      .dataTask(with: request) { (_, response, error) -> Void in
        guard error == nil else {
          print("Error:", error ?? "")
          return
        }

        guard (response as? HTTPURLResponse)?
          .statusCode == 200 else {
            print("down")

            return
        }

        self.isValidURL.toggle()
      }
      .resume()
  }
}

【讨论】:

    猜你喜欢
    • 2014-09-17
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多