是否可以使用 Reachability 检查 WiFi 是否已连接但 Swift 中没有互联网连接?

Is it possible to check if WiFi is connected but there is no internet connection in Swift using Reachability?

我不知道这是否可行,但这是我的问题 -

那么是否可以区分第二种情况,还是与无法访问 Internet 时一样?

我正在使用https://github.com/ashleymills/Reachability.swift

可以找到完整的代码https://github.com/deadcoder0904/net-alert

基本上就在one file

相关代码-

let reachability = Reachability()!

reachability.whenReachable = { reachability in
    if reachability.connection == .wifi {
            print("Reachable via WiFi")
            self.setStatusIcon(color: "green")
    } else {
            print("Reachable via Cellular")
            self.setStatusIcon(color: "yellow")
    }
}

reachability.whenUnreachable = { _ in
    print("Not reachable")
    self.setStatusIcon(color: "red")
}

do {
    try reachability.startNotifier()
} catch {
    print("Unable to start notifier")
    self.setStatusIcon(color: "yellow")
}

其中setStatusIcon()根据颜色设置状态图标

我想知道在 Swift 中什么时候无法访问互联网但已连接 WiFi?

我找到了解决办法。

正如 Augie 所建议的,无法使用 Reachability 来做到这一点,因为它只是检查 WiFi 或 Cellular 是否可达。

所以我不得不ping一个网站来检查它是否在线。

如果我从它那里收到 200 响应,那么它已连接。

但如果我没有得到 200,那么即使 WiFi 已连接但没有互联网。

我不知道如何正确 Ping 所以我问了 where I got

完整代码见https://github.com/deadcoder0904/net-alert