我正在尝试从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()
代替)因为建立连接可能需要一段时间
–特别是在使用蜂窝网络时–主线程将是
否则阻止。