2017-02-07 3 views
0

Я отправляю параметры в свой API с помощью Alamofire.
Я пытаюсь использовать разные параметры, основываясь на том, есть ли у нас пароль или нет.

См часть моего кода ниже:Параметры Alamofire, основанные на значении

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: [ 

, когда я поставил точку останова за если/другое заявление он говорит, что есть 0 элементы.
Что я делаю неправильно?
Возможно, я также могу ускорить это, так как для этого требуется больше времени.

+0

удалить пусть в вашем если заявления. Edit: Nirav D быстрее меня :) – Ludovic

+0

@Ludovic Пробовал делать это, но это дает другие ошибки. http://imgur.com/a/yqUsE –

ответ

3

В блоке if-else вы создаете новую константу parameters, поэтому измените свой код следующим образом.

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 ?? "", 
    ] as [String : Any] 
} 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 ?? "", 
    ] as [String : Any] 
} 
+0

Уже пробовал это, но это дает мне некоторые другие ошибки. http://imgur.com/a/yqUsE –

+0

@MatthijsOtterloo Попробуйте заменить свой код на мой и поместите как [String: Any] наконец. –

+0

@MatthijsOtterloo Также эта ошибка не связана со словарем. –

1

Вы обновляете переменные параметров, а не присваиваете им.

Вы можете назначить переменной let только один раз, однако это назначение не обязательно должно выполняться как часть того же оператора, что и объявление.

Например:

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

Некоторые комментарии, как на сообщение ниже, это дает мне другие ошибки. http://imgur.com/a/yqUsE –

+0

@NiravD Да, это, вероятно, проблема. Но как я могу это решить? Потому что удаление оператора let не фиксирует его. –