mcf*_*oft 3 nsurlconnection swift
关于这一点有很多讨论,我理解使用委托方法并检查响应"404"的解决方案:
var request : NSURLRequest = NSURLRequest(URL: url)
var connection : NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection.start()
    func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
//...
}
但我想有一个简单的解决方案,如:
var exists:Bool=fileexists(sURL);
因为我会在代理的同一个类中有很多请求,我只想用我的函数fileexists()来检查响应.
任何提示?
更新 我想我将不得不做如下的同步请求,但我总是得到0x0000000000000000作为响应::
   let urlPath: String = sURL;
    var url: NSURL = NSURL(string: urlPath)!
    var request1: NSURLRequest = NSURLRequest(URL: url)
    var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?
    >=nil
    var error: NSErrorPointer = nil
    var dataVal: NSData =  NSURLConnection.sendSynchronousRequest(request1, returningResponse: response, error:nil)!
    var err: NSError
    println(response)
检查服务器上是否存在资源需要发送HTTP请求并接收响应.TCP通信可能需要一些时间,例如,如果服务器繁忙,客户端和服务器之间的某些路由器无法正常工作,网络中断等.
这就是为什么异步请求总是首选的原因.即使您认为请求应该只需要几毫秒,但由于某些网络问题,有时可能会是几秒钟.并且 - 众所周知 - 阻止主线程几秒钟是一个很大的禁忌.
所有这些,这里是方法的可能实现
 fileExists().你不应该在主线程上使用它,你已被警告过!
HTTP请求方法设置为"HEAD",以便服务器仅发送响应头,但不发送数据.
func fileExists(url : NSURL!) -> Bool {
    let req = NSMutableURLRequest(URL: url)
    req.HTTPMethod = "HEAD"
    req.timeoutInterval = 1.0 // Adjust to your needs
    var response : NSURLResponse?
    NSURLConnection.sendSynchronousRequest(req, returningResponse: &response, error: nil)
    return ((response as? NSHTTPURLResponse)?.statusCode ?? -1) == 200
}
Swift 3.0版本的 Martin R的回答是异步编写的(主线程未被阻止):
func fileExistsAt(url : URL, completion: @escaping (Bool) -> Void) {
    let checkSession = Foundation.URLSession.shared
    var request = URLRequest(url: url)
    request.httpMethod = "HEAD"
    request.timeoutInterval = 1.0 // Adjust to your needs
    let task = checkSession.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
        if let httpResp: HTTPURLResponse = response as? HTTPURLResponse {
            completion(httpResp.statusCode == 200)
        }
    })
    task.resume()
}
| 归档时间: | 
 | 
| 查看次数: | 3086 次 | 
| 最近记录: |