5

Apple 已经创建了著名的 Reachability 类,但查看代码我不太信任它。格式和标题很乱。

它也没有帮助显示“你没有互联网!” 警报。

我只想做:

  • 在某个时候下载一个 XML。

  • 当没有互联网时,显示警报。

  • 当下载 XML 时 Internet 断开连接时,显示警报。

在我的应用程序中,用户没有点击下载按钮,这一切都在后台自动发生。

就是这样。真的。我现在在可达性上花了 3 个小时,我的大脑只是拒绝它。

有人用干净的标题和干净的代码创造了一个聪明的替代方案吗?使用起来非常简单的东西?

4

3 回答 3

0

我在 GitHub 上找到了一个: https ://github.com/tonymillion/Reachability

注意:首先查找!= 一定是最好的查找。

于 2012-05-29T15:09:09.167 回答
0

回复可能为时已晚,但正如我在这里回答的那样,以下答案可以帮助寻找解决同一问题的人。

在 iOS 上检测 Internet 连接的最简单方法是什么?

于 2013-02-14T08:06:10.953 回答
0

看看Network框架。它超级强大且灵活,允许直接访问 TLS、TCP 和 UDP 等协议,用于您的自定义应用程序协议。它是 Swift 就绪且易于使用的。

import Network
// To try a connection to a host
let connection = NWConnection(host: "www.google.com", port: .https, using: .tcp)
connection.stateUpdateHandler = { (newState) in
    switch(newState) {
    case .ready:
        print("Handle connection established")
    case .waiting(let error):
        print("Waiting for network", error.localizedDescription)
    case .failed(let error):
        print("Fatal connection error", error.localizedDescription)
    default:
        break
    }
}
connection.start(queue: .global(qos: .background))

// The code above will work even in Playground (and fire the stateUpdateHandler at least once). In real app stateUpdateHandler will be called every time the state changes. BTW, URLSession, is built upon this framework.

// To get general connection status:

let monitor = NWPathMonitor()

monitor.pathUpdateHandler = { path in
    if path.status != .satisfied {
        print("Not connected")
    }
    else if path.usesInterfaceType(.cellular) {
        print("Cellular 3/4/5g connection")
    }
    else if path.usesInterfaceType(.wifi) {
        print("Wi-Fi connection")
        print(path.status)
    }
    else if path.usesInterfaceType(.wiredEthernet) {
        print("Ethernet connection")
    }
}

monitor.start(queue: .global(qos: .background))
于 2021-10-27T15:09:44.960 回答