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)")
しかし、この行は私にエラーを表示します:Callの余分な引数 'encoding'。
var responseText: String = String(data: response, encoding: NSUTF8StringEncoding)
この「応答」を文字列に変換する方法を教えてください。
データを取得し、必要に応じてutf文字列にします。応答の説明は応答本文ではありません
let responseData = String(data: data, encoding: NSUTF8StringEncoding)
代わりにHEADER FIELDが必要な場合:
let httpResponse = response as NSHTTPURLResponse
let field = httpResponse.allHeaderFields["NAME_OF_FIELD"]
更新された回答:
結局のところ、ヘッダーフィールドのコンテンツを取得する必要があります。
_if let httpResponse = response as? NSHTTPURLResponse {
if let sessionID = httpResponse.allHeaderFields["JSESSIONID"] as? String {
// use sessionID
}
}
_
オブジェクトを出力すると、そのdescription
メソッドが呼び出されます。
これが、println()
を実行すると、テキスト表現を取得する理由です。
目的を達成する方法は2つあります。
簡単な方法
_let responseText = response.description
_
ただし、これはデバッグにのみ適しています。
ローカライズされた方法
_let localizedResponse = NSHTTPURLResponse.localizedStringForStatusCode(response.statusCode)
_
ユーザーにエラーを表示する必要がある場合は常に、2番目の方法を使用します。
Swiftの新しいバージョンの場合
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()
}
データタスクからの応答データはdata
に保存されるため、以下のコードが必要になります。 response
は、http応答の詳細については、ステータスコードなどを含むhttp応答です here
var responseString: String = String(data: data, encoding: NSUTF8StringEncoding)
var responseText: String = response.description
と同じくらいシンプルでした。
答えjsonを文字列として表示する場合は、Swift 5
let httpResponse = response as? HTTPURLResponse
if let jsonResponse = String(data: data!, encoding: String.Encoding.utf8) {
print("JSON String: \(jsonResponse)")
}