swift - 检查服务器是否在线

标签 swift connectivity

我需要一种方法来检查服务器是否在线。理想情况下,它只会返回 true/false。

我已经尝试过这个:

    class func serverIsOnline() -> Bool{
        let session = NSURLSession.sharedSession()
        let urlString = "http://myserver.com"
        let url = NSURL(string: urlString)
        let request = NSURLRequest(URL: url!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 3.0)

        let dataTask = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in

            if let httpResponse = response as? NSHTTPURLResponse {
                if httpResponse.statusCode == 200 {
                    //server online
                    return true
                } else {
                    //server offline
                    return false
                }
            }
        }
        dataTask.resume()
    }

当我尝试返回 true/false 时,出现以下错误:

Unexpected non-void return value in void function

如何修改此函数以便我可以检查我的服务器是否在线并返回 true/false ?

最佳答案

你的方法有问题

  1. 它是异步的
  2. 您的闭包无法返回任何内容,它是 Void

要修复此问题,您必须使调用同步,并将响应存储在 Bool 中,以便在闭包完成后可以返回它。使 dataTaskWithRequestHandler 同步,例如 this 。在顶部声明一个变量,如 reachable 并在闭包内将其设置为 true 或 false,然后在任务完成后返回它。

关于swift - 检查服务器是否在线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37122421/

相关文章:

ios - 每次重新安装应用程序时,供应商标识符都会发生变化

swift - 通过 firebase 登录获取更大的 facebook 图片

ios - Dealloc 正在推迟

ios - 从 NSSet 创建 NSManagedObject 时不规则崩溃

android - 检测 "use only 2G networks"设置

ssh - Ansible ssh 连接在其中一项任务中失败 [失败],而在其他任务中却有效

ios - 解析自动登录--隐藏登录界面

Android 定期检查互联网连接

java - 在关闭警报对话框之前检查网络连接

java.net.UnknownHostException : Unable to resolve host "www.google.com"