检查服务器是否在线

时间:2016-05-09 17:59:46

标签: 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时,我收到以下错误:

  

void函数中出现意外的非void返回值

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

2 个答案:

答案 0 :(得分:1)

您的方法存在问题

  1. 这是异步的
  2. 你的关闭不能返回任何东西,它是Void
  3. 要修复它,您必须使调用同步,并将响应存储在Bool中,以便在闭包完成后返回。让dataTaskWithRequestHandler同步,例如this。像reachable一样在顶部声明一个变量,并在闭包内将其设置为true或false,然后在任务完成后返回它。

答案 1 :(得分:0)

如何在参数中使用处理程序并使用适当的值

调用它
class func serverIsOnline(isOnline: (Bool) -> Void) -> Void {

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

            if let httpResponse = response as? NSHTTPURLResponse {
                isOnline(httpResponse.statusCode == 200)
            }
        }

        dataTask.resume()
    }