Senden Sie ein array als parameter in einer Alamofire POST-Anforderung
Meine app ist aktuell für die Nutzung von AWS-API-Gateway und Alamofire Zugriff auf verschiedene lambda-Funktionen, die handeln, als mein backend.
Ich das Bedürfnis haben, senden Sie ein array als Parameter an eine von diesen API-Endpunkte, dafür bin ich mit dem folgenden code:
var interests : [String]
interests = globalInterests.map({ (interest) -> String in
return interest.id!
})
//Parameters needed by the API
let parameters: [String: AnyObject] = [
"name" : name,
"lastName" : lastName,
"interests" : interests
]
//Sends POST request to the AWS API
Alamofire.request(.POST, url, parameters: parameters, encoding: .JSON).responseJSON { response in
//Process Response
switch response.result {
case .Success:
print("Sucess")
case .Failure(let error):
print(error)
}
}
Aber, dass nicht funktioniert, weil das array nicht erkannt wird von der API, aber wenn ich erstelle einen "statischen" array
let interests = ["a", "b", "c"]
Alles funktioniert wie es soll.
Wie kann ich dieses Problem beheben situation gegeben, dass das array der Interessen kommen aus einem anderen Teil des Codes, wie soll ich es erklären oder konstruieren Sie Sie?
Einem Freund gelang es, dies in Android mit einem
ArrayList<String>
EDIT:
Druck-Parameter array zeigt mir dies:
["name":test, "interests": <_TtCs21_SwiftDeferredNSArray 0x7b05ac00>( 103, 651, 42), "lastName": test]
Ich denke, die 'Interessen' ist immer leer und der code berechnet, dass Interessen nicht die für mich Sinn machen. Sie haben ein leeres array deklariert, und Sie versuchen, die Karte über es!. Können Sie das klären, dass ein Teil?
Bearbeitet die Frage, die ich gemacht ich Fehler beim kopieren des code. Nach der Karte der array ist nicht leer und ist ein [(String)] mit 3-Werte
Ein update für das problem ?
Verwenden Sie [String: Beliebig] statt [String: AnyObject]
InformationsquelleAutor ur3k | 2016-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
AnyObject kann nur darstellen, Klasse Typ. In Swift, Array und Dictionary sind struct statt der Klasse geben Sie in viele andere Sprachen. Die Struktur kann beschrieben werden, in AnyObject, und das ist, warum Jeder kommt in. Neben der Klasse, die Alle genutzt werden kann, in allen anderen Typen, einschließlich der struct und enum.
Daher immer, wenn wir die Typumwandlung array oder ein dictionary zu AnyObject _TtCs21_SwiftDeferredNSArray Fehler Auftritt.Also müssen wir Alle statt AnyObject.
InformationsquelleAutor Aseem Aggawral
Mithilfe NSJSONSerialization zu Kodieren von JSON, Sie können bauen Sie Ihre eigenen NSURLRequest für die Verwendung in Alamofire, hier ist ein Swift 3 Beispiel:
InformationsquelleAutor mourodrigo
Das problem ist, dass Sie nur deklariert das array und nicht initialisiert. Das macht das Interesse array als null-selbst wenn u versuchen, die Daten einfügen. Schreiben Sie
statt
InformationsquelleAutor Manjul Shrestha
lassen ValueArray = ["userid": "name","Passwort":Passwort]
pass ValueArray [Parameter: ValueArray] überprüfen Sie auch die Codierung akzeptiert von der API.
InformationsquelleAutor Abhishek
Es stellte sich heraus, dass ein problem mit duplizierten ids in das array. Der code hinter der API warf eine Ausnahme, die nicht wieder zurück schicken da ein Fehler.
Alle anderen Antworten richtig sind, getestet habe ich Sie nach Auffinden des Problems und alles funktioniert, so werde ich die up-vote).
Danke Ihnen sehr.
"People": <_TtCs21_SwiftDeferredNSArray 0x7f7f565d1440>( 3, 23105 )
.In meinem Fall war das problem auf der server Seite und nicht eine Alamofire problem. Ich würde empfehlen, Sie eröffnen eine neue Frage mit mehr details über das, was Los ist.
InformationsquelleAutor ur3k