SwiftUI 检查 URL 是不是可达并自动切换到 ContentView
Posted
技术标签:
【中文标题】SwiftUI 检查 URL 是不是可达并自动切换到 ContentView【英文标题】: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
是如何被调用的?
【参考方案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()
【讨论】:
以上是关于SwiftUI 检查 URL 是不是可达并自动切换到 ContentView的主要内容,如果未能解决你的问题,请参考以下文章
无法检查特定 IP 地址的可达性。是不是有任何 MAC 框架支持此功能