我需要一种方法来检查服务器是否在线。理想情况下,它只会返回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?
答案 0 :(得分:1)
您的方法存在问题
Void
。要修复它,您必须使调用同步,并将响应存储在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()
}