检查服务器是否在线

检查服务器是否在线

This question already has answers here:
How can I get the Data from NSURLSession.sharedSession().dataTaskWithRequest
                                
                                    (2个答案)
                                
                        
                        
                            Returning data from async call in Swift function
                                
                                    (12个答案)
                                
                        
                                3年前关闭。
            
                    
我需要一种方法来检查服务器是否在线。理想情况下,它将只返回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函数中非预期的非无效返回值


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

最佳答案

您方法的问题是


不同步
您的闭包不能返回任何内容,它是Void


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

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

10-15 12:39