下面是我天真的第一遍代码:
var httpUrlResponse: NSHTTPURLResponse? // = (...get from server...)
let contentType = httpUrlResponse?.allHeaderFields["Content-Type"]我尝试过这段代码的各种派生,但我一直收到编译器警告/错误,这些错误与NSDictionary类型的allHeaderFields属性之间的基本阻抗不匹配以及我只想获得一个字符串或可选字符串的愿望有关。
只是不知道该怎么强迫他们。
发布于 2014-09-01 21:44:09
您可以在Swift 3中执行如下操作:
if
let httpResponse = response as? HTTPURLResponse,
let contentType = httpResponse.value(forHTTPHeaderField: "Content-Type")
{
// use contentType here
}
task.resume()显然,这里我从URLResponse ( response变量)转到HTTPURLResponse。我使用的不是allHeaderFields,而是value(forHTTPHeaderField:),它是键入的,使用不区分大小写的键。
希望这说明了这个想法。
有关Swift 2,请参见previous revision of this answer。
发布于 2014-09-01 21:10:11
这适用于Xcode 6.1:
let contentType = httpUrlResponse?.allHeaderFields["Content-Type"] as String?不再需要多次强制转换。
在使用Swift 1.2的Xcode 6.3中,这是可行的:
let contentType = httpUrlResponse?.allHeaderFields["Content-Type"] as? String发布于 2017-08-10 23:05:19
我使用URLResponse的一个扩展来简化这个(Swift 3):
extension URLResponse {
func getHeaderField(key: String) -> String? {
if let httpResponse = self as? HTTPURLResponse {
if let field = httpResponse.allHeaderFields[key] as? String {
return field
}
}
return nil
}
}https://stackoverflow.com/questions/25611908
复制相似问题