【发布时间】:2015-06-20 08:10:28
【问题描述】:
我有一个用 Swift 1.2 编写的函数,用于检查地址或 IP 的可达性。这里是:
func isHostConnected(hostAddress : String) -> Bool
{
var response : NSURLResponse?
let request = NSMutableURLRequest(URL: NSURL(string: hostAddress)!)
request.timeoutInterval = 3
let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: nil)
return ((response as? NSHTTPURLResponse)!.statusCode == 200)
}
现在,NSURLConnection 已被弃用,根据 Xcode 的建议,我尝试使用 NSURLSession.dataTaskWithRequest 编写它,这里是:
func isHostConnected(hostAddress : String) -> Bool
{
let request = NSMutableURLRequest(URL: NSURL(string: hostAddress.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)!)
request.timeoutInterval = 3
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: nil, delegateQueue: NSOperationQueue.mainQueue())
var responseCode = -1
session.dataTaskWithRequest(request, completionHandler: {(data : NSData?, response : NSURLResponse?, error : NSError?) -> Void in
responseCode = (response as? NSHTTPURLResponse)!.statusCode
})!.resume()
return (responseCode == 200)
}
上面的代码总是返回 false(很明显),因为 completionHandler 在单独的线程上执行。
我担心的是,我能否让 completionHandler() 在 MainThread 上运行,就像 sendSynchronousRequest 那样通过阻止它来运行。
我有理由不在这里使用“Apple's Reachabilty”。
任何建议都会有所帮助。 :)
【问题讨论】: