2017-02-07 2 views
0

Ich poste Parameter zu meiner API mit Alamofire.
Ich versuche verschiedene Parameter basierend darauf zu verwenden, ob wir ein Passwort haben oder nicht.

Sehen Sie einen Teil unterhalb meinem Codes:Alamofire-Parameter basierend auf Wert

let parameters: [String: Any] = [:] 

    if (password != nil) { 
     let parameters: [String : Any] = [ 
      "displayName": firstName + " " + lastName, 
      "firstName": firstName, 
      "lastName": lastName, 
      "password": password ?? "", 
      "passwordConfirmation": password ?? "", 
      "location": location?.json ?? [:], 
      "wallet": wallet?.json ?? [:], 
      "gender": gender.rawValue, 
      "avatarId": 1, 
      "email": email, 
      "authExternalAccessToken": accessToken ?? "", 
     ] 
    } else { 
     let parameters: [String : Any] = [ 
      "displayName": firstName + " " + lastName, 
      "firstName": firstName, 
      "lastName": lastName, 
      "password": password ?? "", 
      "passwordConfirmation": password ?? "", 
      "location": location?.json ?? [:], 
      "wallet": wallet?.json ?? [:], 
      "gender": gender.rawValue, 
      "avatarId": 1, 
      "email": email, 
      "authExternalAccessToken": accessToken ?? "", 
     ] 
    } 

    Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [ 

, wenn ich einen Haltepunkt hinter dem if/else-Anweisung gesetzt es sagt, dass es 0 Elemente sind.
Was mache ich falsch?
Ich kann das wahrscheinlich auch beschleunigen, da es länger dauert, auf diese Weise zu bauen.

+0

entfernen in Ihrer if-Anweisungen lassen. Edit: Nirav D ist schneller als ich :) – Ludovic

+0

@Ludovic Versucht dies zu tun, aber das gibt andere Fehler. http://imgur.com/a/yqUsE –

Antwort

3

In if-else Block erstellen Sie neue Konstante parameters, so ändern Sie Ihren Code wie folgt.

+0

Bereits versucht, dies zu tun, aber das gibt mir einige andere Fehler. http://imgur.com/a/yqUsE –

+0

@MatthijsOtterloo Versuchen Sie, Ihren Code durch meinen zu ersetzen und schließlich als [String: Any] zu setzen. –

+0

@MatthijsOtterloo Auch dieser Fehler bezieht sich nicht auf das Wörterbuch. –

1

Sie deklarieren Ihre Parametervariable neu, anstatt sie zuzuweisen.

Sie können einer let-Variablen nur ein einziges Mal zuweisen, diese Zuweisung muss jedoch nicht als Teil derselben Anweisung wie die Deklaration erfolgen.

Zum Beispiel:

let parameters: [String: Any] 

if (password != nil) { 
    parameters = [ 
     "displayName": firstName + " " + lastName, 
     "firstName": firstName, 
     "lastName": lastName, 
     "password": password ?? "", 
     "passwordConfirmation": password ?? "", 
     "location": location?.json ?? [:], 
     "wallet": wallet?.json ?? [:], 
     "gender": gender.rawValue, 
     "avatarId": 1, 
     "email": email, 
     "authExternalAccessToken": accessToken ?? "", 
    ] 
} else { 
    parameters = [ 
     "displayName": firstName + " " + lastName, 
     "firstName": firstName, 
     "lastName": lastName, 
     "password": password ?? "", 
     "passwordConfirmation": password ?? "", 
     "location": location?.json ?? [:], 
     "wallet": wallet?.json ?? [:], 
     "gender": gender.rawValue, 
     "avatarId": 1, 
     "email": email, 
     "authExternalAccessToken": accessToken ?? "", 
    ] 
} 

Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: [ 
+0

Einige Kommentare wie auf dem Post unten, das gibt mir andere Fehler. http://imgur.com/a/yqUsE –

+0

@NiravD Ja, das ist wahrscheinlich das Problem. Aber wie kann ich das lösen? Weil das Entfernen der let-Anweisung es nicht repariert. –