23

我想将我的响应从 NSHTTPURLResponse 类型转换为字符串:

let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) -> Void in 
     println("Response: \(response)")
     var responseText: String = String(data: response, encoding: NSUTF8StringEncoding)
})

下面的行将响应消息输出到控制台。

println("Response: \(response)")

但是这一行给我一个错误:Extra argument 'encoding' in Call.

var responseText: String = String(data: response, encoding: NSUTF8StringEncoding)

如何成功地将这个“响应”转换为字符串?

4

6 回答 6

44

身体

如果需要,获取数据并将其设为 utf 字符串。响应的描述不是响应正文

let responseData = String(data: data, encoding: NSUTF8StringEncoding)

头域

如果您想要一个标题字段:

let httpResponse = response as NSHTTPURLResponse
let field = httpResponse.allHeaderFields["NAME_OF_FIELD"]
于 2015-01-25T21:28:07.790 回答
6

更新答案:

事实证明,您想要获取标题字段的内容。

if let httpResponse = response as? NSHTTPURLResponse {
    if let sessionID = httpResponse.allHeaderFields["JSESSIONID"] as? String {
        // use sessionID
    }
}

当你打印一个对象时,它的description方法被调用。

这就是为什么当println()你得到一个文本表示时。

有两种方法可以实现您想要的。

  1. 简单的方法

    let responseText = response.description
    

但是,这仅对调试有用。

  1. 本地化方式

    let localizedResponse = NSHTTPURLResponse.localizedStringForStatusCode(response.statusCode)
    

每当您需要向用户显示错误时,请使用第二种方法。

于 2015-01-25T21:31:08.837 回答
4

快速更新版本

   let task = session.dataTask(with: url) {(data, response, error) in

        let httpResponse = response as! HTTPURLResponse

        let type = httpResponse.allHeaderFields["Content-Type"]
        print("Content-Type", type)

        let l = httpResponse.allHeaderFields["Content-Length"]
        print("Content-Length", l)

        if let response = response {   // Complete response
            print(response)
        }


            }catch {
                print(error)
            }
        }
        }.resume()

}
于 2018-07-11T22:40:36.090 回答
2

您将需要下面的代码,因为您的数据任务的响应数据存储在data. response是 http 响应,带有状态代码等,有关 http 响应的更多信息,请转到此处

var responseString: String = String(data: data, encoding: NSUTF8StringEncoding)
于 2015-01-25T21:29:29.677 回答
1

如果您想在 Swift 5 中将答案 json 视为字符串

let httpResponse = response as? HTTPURLResponse

if let jsonResponse = String(data: data!, encoding: String.Encoding.utf8) {
    print("JSON String: \(jsonResponse)")
}
于 2020-03-10T21:03:18.793 回答
-1

这很简单var responseText: String = response.description

于 2015-01-25T21:28:03.127 回答