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?
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)
si vous voulez un champ d'en-tête à la place:
let httpResponse = response as NSHTTPURLResponse
let field = httpResponse.allHeaderFields["NAME_OF_FIELD"]
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.
La manière simple
let responseText = response.description
Cependant, cela n'est bon que pour le débogage.
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.
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()
}
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)
C'était aussi simple que var responseText: String = response.description
.
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)")
}