web-dev-qa-db-ja.com

SwiftでNSHTTPURLResponseを文字列に変換する方法

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)

この「応答」を文字列に変換する方法を教えてください。

18
Karl Ivar

データを取得し、必要に応じてutf文字列にします。応答の説明は応答本文ではありません

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

ヘッダーフィールド

代わりにHEADER FIELDが必要な場合:

let httpResponse = response as NSHTTPURLResponse
let field = httpResponse.allHeaderFields["NAME_OF_FIELD"]
34
Daij-Djan

更新された回答:

結局のところ、ヘッダーフィールドのコンテンツを取得する必要があります。

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

オブジェクトを出力すると、そのdescriptionメソッドが呼び出されます。

これが、println()を実行すると、テキスト表現を取得する理由です。

目的を達成する方法は2つあります。

  1. 簡単な方法

    _let responseText = response.description
    _

ただし、これはデバッグにのみ適しています。

  1. ローカライズされた方法

    _let localizedResponse = NSHTTPURLResponse.localizedStringForStatusCode(response.statusCode)
    _

ユーザーにエラーを表示する必要がある場合は常に、2番目の方法を使用します。

6
HAS

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()

}
2
user3826696

データタスクからの応答データはdataに保存されるため、以下のコードが必要になります。 responseは、http応答の詳細については、ステータスコードなどを含むhttp応答です here

var responseString: String = String(data: data, encoding: NSUTF8StringEncoding)
2
Marius Fanu

var responseText: String = response.descriptionと同じくらいシンプルでした。

0
Karl Ivar

答えjsonを文字列として表示する場合は、Swift 5

let httpResponse = response as? HTTPURLResponse

if let jsonResponse = String(data: data!, encoding: String.Encoding.utf8) {
    print("JSON String: \(jsonResponse)")
}