Ich versuche mit Alamofire eine Post-Anfrage mit einer schnellen Leiche zu stellen.
Mein json Körper sieht aus wie:
{
"IdQuiz" : 102,
"IdUser" : "iosclient",
"User" : "iosclient",
"List":[
{
"IdQuestion" : 5,
"IdProposition": 2,
"Time" : 32
},
{
"IdQuestion" : 4,
"IdProposition": 3,
"Time" : 9
}
]
}
Ich versuche let
list
mit NSDictionnary Folgendes zu machen :
[[Time: 30, IdQuestion: 6510, idProposition: 10], [Time: 30, IdQuestion: 8284, idProposition: 10]]
und meine Anfrage mit Alamofire sieht so aus:
Alamofire.request(.POST, "http://myserver.com", parameters: ["IdQuiz":"102","IdUser":"iOSclient","User":"iOSClient","List":list ], encoding: .JSON)
.response { request, response, data, error in
let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)
println(dataString)
}
Die Anfrage hat einen Fehler und ich glaube, das Problem liegt in der Wörterbuchliste. Wenn ich eine Anfrage ohne die Liste mache, funktioniert sie einwandfrei.
Ich habe die vorgeschlagene Lösung ausprobiert, stehe aber vor dem gleichen Problem:
let json = ["List":list,"IdQuiz":"102","IdUser":"iOSclient","UserInformation":"iOSClient"]
let data = NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted,error:nil)
let jsons = NSString(data: data!, encoding: NSUTF8StringEncoding)
Alamofire.request(.POST, "http://myserver.com", parameters: [:], encoding: .Custom({
(convertible, params) in
var mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest
mutableRequest.HTTPBody = jsons!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
return (mutableRequest, nil)
}))
.response { request, response, data, error in
let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)
println(dataString)
}
Antworten:
Du bist nah dran. Die Formatierung des Parameterwörterbuchs sieht nicht korrekt aus. Sie sollten Folgendes versuchen:
Hoffentlich hat das Ihr Problem behoben. Wenn nicht, antworten Sie bitte und ich werde meine Antwort entsprechend anpassen.
quelle
nil
zuAnyObject
?Wenn Sie Alamofire v4.0 + verwenden, sieht die akzeptierte Antwort folgendermaßen aus:
quelle
JSONEncoding
, den Typ, der es für mich getan hat , zu disambiguieren.Ich weiß nicht wie alle anderen Antworten bisher (außer vielleicht die einem von SwiftDeveloper), weil sie entweder Sie benötigen , um Ihre JSON deserialisieren, denn es ist nur wieder serialisiert werden, oder kümmert sich um die Struktur des JSON selbst.
Die richtige Antwort wurde von afrodev in einer anderen Frage veröffentlicht. Du solltest es verbessern.
Unten ist nur meine Anpassung mit einigen geringfügigen Änderungen (hauptsächlich expliziter UTF-8-Zeichensatz).
quelle
toJSONString
keine native Methode ist. Es handelt sich also im Grunde genommen um eine Black Box, die Sie implementieren müssen. Zweitens liefert die Antwort, die Sie geben, eine Variable,json
die als JSON-Zeichenfolge beginnt. Realistisch gesehen hat niemand die Parameter auf diese Weise, es sei denn, Sie konvertieren und speichern sie lokal auf diese Weise.toJSONString
in meiner Antwort steht nein , 2) "realistisch gesehen hat niemand die Parameter so" - das macht viele Annahmen; Der JSON kann aus ganz unterschiedlichen Teilen der App stammen, die überhaupt nichts mit der Anforderung zu tun haben und von denen der Netzwerkcode nichts weiß.Xcode 8.X, Swift 3.X.
Einfache Verwendung;
quelle
Wenn Sie verwenden
swift4
undAlamofire v4.0
dann würde der akzeptierte Code folgendermaßen aussehen:quelle
Akzeptierte Antwort in Xcode 11 - Swift 5 - Alamofire 5.0
quelle
Ich habe die Antwort von SwiftDeveloper leicht bearbeitet , weil sie bei mir nicht funktioniert hat. Ich habe auch die Alamofire-Validierung hinzugefügt.
quelle
Es gibt einige Änderungen, die ich mitteilen möchte. Sie können von nun an auf Anforderungs-, JSON- und Fehler vom Antwortobjekt zugreifen.
quelle
quelle
Hier ist, wie ich eine HTTP-POST-Anforderung mit Swift erstellt habe, die Parameter mit Json-Codierung und mit Headern benötigt.
API-Client BKCAPIClient als gemeinsam genutzte Instanz erstellt, die alle Arten von Anforderungen wie POST, GET, PUT, DELETE usw. enthält.
Erstellt eine Operationsklasse, die alle für eine bestimmte Anforderung erforderlichen Daten sowie eine Analyselogik innerhalb des Abschlussblocks enthält.
API aufrufen In jedem View Controller, in dem wir diese Daten benötigen
quelle
quelle
Wenn sich jemand fragt, wie er mit Modellen und anderen Dingen vorgehen soll, siehe unten
quelle
Alamofire ~ 5.2 und Swift 5
Sie können Ihre Parameterdaten strukturieren
Arbeite mit gefälschter JSON- API
quelle