检查互联网连接是否可用
Check whether internet connection is available
我正在编写一个函数来检查用户设备是否已连接到互联网。如果不是,它会用警告框警告用户。
最初我使用下面的方法,效果很好:
var data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: &response) as NSData?
但这已在 iOS 9 中弃用。
所以我将代码更改为以下内容。
import Foundation
import SystemConfiguration
public class Reachability {
class func isConnectedToNetwork()->Bool{
var Status:Bool = false
let url = NSURL(string: "https://google.com/")
var response: NSURLResponse?
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "HEAD"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
request.timeoutInterval = 10.0
let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, err -> Void in
if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode == 200 {
Status = true
}
}
})
task.resume()
return Status
}}
问题是它总是说没有互联网连接,这显然是错误的。这意味着 "Bool" 总是错误的。我做错了什么?
提前致谢。
推荐的方式是发送你真正想发送的请求,并判断成功还是失败,如果失败则判断失败的原因。没有办法可靠地检测是否有连接。
使用可达性或其他一些测试是您应该如何满足您的实际要求。
然而,为了回答你的问题,这总是 returns false
的原因是数据任务是异步的——也就是说它将独立于函数调用完成,所以到时候它完成并尝试将状态设置为 true
,该函数已返回 false
我正在编写一个函数来检查用户设备是否已连接到互联网。如果不是,它会用警告框警告用户。
最初我使用下面的方法,效果很好:
var data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: &response) as NSData?
但这已在 iOS 9 中弃用。
所以我将代码更改为以下内容。
import Foundation
import SystemConfiguration
public class Reachability {
class func isConnectedToNetwork()->Bool{
var Status:Bool = false
let url = NSURL(string: "https://google.com/")
var response: NSURLResponse?
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "HEAD"
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
request.timeoutInterval = 10.0
let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, err -> Void in
if let httpResponse = response as? NSHTTPURLResponse {
if httpResponse.statusCode == 200 {
Status = true
}
}
})
task.resume()
return Status
}}
问题是它总是说没有互联网连接,这显然是错误的。这意味着 "Bool" 总是错误的。我做错了什么?
提前致谢。
推荐的方式是发送你真正想发送的请求,并判断成功还是失败,如果失败则判断失败的原因。没有办法可靠地检测是否有连接。
使用可达性或其他一些测试是您应该如何满足您的实际要求。
然而,为了回答你的问题,这总是 returns false
的原因是数据任务是异步的——也就是说它将独立于函数调用完成,所以到时候它完成并尝试将状态设置为 true
,该函数已返回 false