web-dev-qa-db-fra.com

Comment convertir NSHTTPURLResponse en chaîne dans Swift

Je voudrais convertir ma réponse du type NSHTTPURLResponse en chaîne:

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

La ligne ci-dessous renvoie le message de réponse à la console.

println("Response: \(response)")

Mais cette ligne me rend une erreur: argument supplémentaire 'encoding' dans Call.

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

Comment puis-je convertir avec succès cette "réponse" en une chaîne?

18
Karl Ivar

corps

saisir les données et en faire une chaîne utf si vous le souhaitez. La description de la réponse n'est pas le corps de la réponse

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

champ d'en-tête

si vous voulez un champ d'en-tête à la place:

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

Réponse mise à jour:

Il s'avère que vous souhaitez obtenir le contenu d'un champ d'en-tête.

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

Lorsque vous imprimez un objet, sa méthode description est appelée.

C'est pourquoi lorsque vous println() vous obtenez une représentation textuelle.

Il y a deux façons d'accomplir ce que vous voulez.

  1. La manière simple

    let responseText = response.description
    

Cependant, cela n'est bon que pour le débogage.

  1. La voie localisée

    let localizedResponse = NSHTTPURLResponse.localizedStringForStatusCode(response.statusCode)
    

Utilisez la deuxième approche chaque fois que vous devez afficher l'erreur à l'utilisateur.

6
HAS

Pour une version plus récente de 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

Vous aurez besoin du code ci-dessous, car les données de réponse de votre tâche de données sont stockées dans data. response est la réponse http, avec des codes d'état, etc., pour plus d'informations sur la réponse http, allez ici

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

C'était aussi simple que var responseText: String = response.description.

0
Karl Ivar

Si vous voulez voir la réponse json sous forme de chaîne, dans Swift 5

let httpResponse = response as? HTTPURLResponse

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