首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问NSHTTPURLResponse的“内容类型”标头?

如何访问NSHTTPURLResponse的“内容类型”标头?
EN

Stack Overflow用户
提问于 2014-09-01 19:25:30
回答 5查看 16K关注 0票数 19

下面是我天真的第一遍代码:

代码语言:javascript
复制
var httpUrlResponse: NSHTTPURLResponse? // = (...get from server...)
let contentType = httpUrlResponse?.allHeaderFields["Content-Type"]

我尝试过这段代码的各种派生,但我一直收到编译器警告/错误,这些错误与NSDictionary类型的allHeaderFields属性之间的基本阻抗不匹配以及我只想获得一个字符串或可选字符串的愿望有关。

只是不知道该怎么强迫他们。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-09-01 21:44:09

您可以在Swift 3中执行如下操作:

代码语言:javascript
复制
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

票数 28
EN

Stack Overflow用户

发布于 2014-09-01 21:10:11

这适用于Xcode 6.1:

代码语言:javascript
复制
let contentType = httpUrlResponse?.allHeaderFields["Content-Type"] as String?

不再需要多次强制转换。

在使用Swift 1.2的Xcode 6.3中,这是可行的:

代码语言:javascript
复制
let contentType = httpUrlResponse?.allHeaderFields["Content-Type"] as? String
票数 1
EN

Stack Overflow用户

发布于 2017-08-10 23:05:19

我使用URLResponse的一个扩展来简化这个(Swift 3):

代码语言:javascript
复制
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
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25611908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档