我正在尝试从url获取文件大小,然后再下载

这是obj-c代码

    NSURL *URL = [NSURL URLWithString:"ExampleURL"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    [request setHTTPMethod:@"HEAD"];
    NSHTTPURLResponse *response;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error: nil];
    long long size = [response expectedContentLength];

这是Swift代码
var url:NSURL = NSURL(string: "ExmapleURL")
                var request:NSMutableURLRequest = NSMutableURLRequest(URL: url)
                request.HTTPMethod = "HEAD"
                var response = NSHTTPURLResponse()
                NSURLConnection.sendSynchronousRequest(request, returningResponse: &response , error: nil)

但我在这里有错误
NSURLConnection.sendSynchronousRequest(request, returningResponse: &response , error: nil)

'NSHTTPURLResponse' is not identical to 'NSURLResponse?'

我在这里想念什么吗?

最佳答案

响应参数的类型

AutoreleasingUnsafeMutablePointer<NSURLResponse?>

这意味着您可以将可选的NSURLResponse的地址作为参数传递:
var response : NSURLResponse?
NSURLConnection.sendSynchronousRequest(request, returningResponse: &response , error: nil)

然后,您可以有条件地将返回的响应强制转换为NSHTTPURLResponse:
if let httpResponse = response as? NSHTTPURLResponse {
    println(httpResponse.expectedContentLength)
}

请注意,您应该检查sendSynchronousRequest()的返回值,即
如果无法建立连接,则为nil

也建议称这个
仅来自单独线程的方法(或使用sendAsynchronousRequest()代替)
因为建立连接可能需要一段时间
–特别是在使用蜂窝网络时–主线程将是
否则阻止。

09-25 18:45