有没有比苹果的Reachability类更复杂的替代方案?

5

苹果已经创建了著名的Reachability类,但是看着它的代码,我并不太信任它。格式和头文件都很混乱。

而且它没有提供任何帮助来显示“您没有互联网!”的警告。

我只想做到以下几点:

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

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

  • 当在下载XML时断开互联网连接,显示警告。

在我的应用程序中,用户点击“不下载”按钮后,所有操作都会自动在后台完成。

就是这样。真的。我现在花了3个小时来处理Reachability,但是我的大脑拒绝接受它。

是否有人创建了一个聪明的替代方案,具有干净的头文件和代码?比较容易使用的东西吗?


3个回答

0

1
永远不会太晚。我们几年后在谷歌上找到这些问题 ;) - Dan Rosenstark

0

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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接