J'ai une question sur la nouvelle version d'Alamofire pour Swift 2
Alamofire.request(.POST, urlString, parameters: parameters as? [String : AnyObject])
.responseJSON { (request, response, result) -> Void in
let dico = result as? NSDictionary
for (index, value) in dico! {
print("index : \(index) value : \(value)")
}
}
Dans cette section, j'aimerais attribuer le résultat à un NSDictionary. Mais quand je compile et mets un point d'arrêt, le débogueur dit que dico est nil. Si j'utilise debugDescription pour imprimer le résultat, il n'est pas nul et contient ce à quoi je m'attendais. Comment puis-je convertir la variable Result?
La réponse acceptée fonctionne très bien, mais avec l’introduction d’Alamofire 3.0.0, certains changements décisifs ont une incidence sur cette implémentation.
Le guide de migration a d'autres explications, mais je vais souligner celles qui sont liées à la solution actuelle.
Réponse
Tous les sérialiseurs de réponse (à l'exception de response) renvoient une structure de réponse générique.
Type de réponse
Le type de résultat a été modifié pour devenir un type double générique qui ne stocke pas le NSData? dans le cas .Failure
.
De plus, tenez compte du fait qu’Alamofire considère que toute demande complétée est considérée comme réussie, quel que soit le contenu de la réponse. Vous devez donc chaîner une .validate()
avant .responseJSON()
pour toucher le cas .Failure
. En savoir plus à ce sujet ici .
Code mis à jour:
let url = "http://api.myawesomeapp.com"
Alamofire.request(.GET, url).validate().responseJSON { response in
switch response.result {
case .Success(let data):
let json = JSON(data)
let name = json["name"].stringValue
print(name)
case .Failure(let error):
print("Request failed with error: \(error)")
}
}
Pour référence:
Si cela ne vous dérange pas d'utiliser la bibliothèque SwiftyJSON , voici un exemple de travail dans Xcode 7 Beta 5 + Alamofire 2.0.0-beta.1 + SwiftyJSON (branche xcode7)
Alamofire.request(.GET, url, parameters: params, encoding: ParameterEncoding.URL).responseJSON { (_, _, result) in
switch result {
case .Success(let data):
let json = JSON(data)
let name = json["name"].string
case .Failure(_, let error):
print("Request failed with error: \(error)")
}
}
Modifier:
Mis à jour SwiftyJSON git page