Параметр Alamofire с несколькими значениями в одном ключе - PullRequest
0 голосов
/ 30 сентября 2019

Как отправить параметр в качестве параметра alamofire для следующих данных?

data : {"username":"username","password":"password"}

Я хочу добиться следования через параметр alamofire, но мне это не удалось.

что я делаю это:

let parameter: Parameters = ["data": ["username": "\(textFieldUserName.text!)", "pass": "\(textFieldPassword.text!)"]]

Alamofire.request(loginUrl, method: .post, parameters: parameter,encoding: JSONEncoding.default, headers: nil).responseJSON { response in

но это не работает.

enter image description here

1 Ответ

1 голос
/ 30 сентября 2019

После просмотра используемого API-интерфейса: API-интерфейс ожидает, что значение данных будет строкой, а не объектом. Вам нужно будет сделать что-то вроде этого: Но это может быть реорганизовано, чтобы быть намного чище, это просто, чтобы объяснить, что происходит.

Создайте параметры данных:

let data: Parameters = [
    "username": "\(textFieldUserName.text!)",
    "pass": "\(textFieldPassword.text!)"
]

и затем конвертируйтеэто в строку: ниже приведен быстрый поиск для преобразования json в строку, но вам нужно будет проверить это дважды, поскольку я принял первый ответ.

let string = stringify(json: data, prettyPrinted: false)

let parameters: Parameters = [
    "data": string
]

и в запросе установите кодировку в: encoding: URLEncoding.default

Alamofire.request(
        loginURL,
        method: .post,
        parameters: parameters,
        encoding: URLEncoding.default,
        headers: nil).responseJSON { (responseData) -> Void in
            if responseData.result.value != nil {
                //do something with data
    }
}

func stringify(json: Any, prettyPrinted: Bool = false) -> String {
    var options: JSONSerialization.WritingOptions = []
    if prettyPrinted {
        options = JSONSerialization.WritingOptions.prettyPrinted
    }

    do {
      let data = try JSONSerialization.data(withJSONObject: json, options: options)
      if let string = String(data: data, encoding: String.Encoding.utf8) {
          return string
      }
    } catch {
          print(error)
    }
    return ""
}

Я бы также попытался избежать принудительного разворачивания свойств textfield.text, если только вы не проверяете их значения где-то еще перед этим, и поскольку вызов API является http, вам также необходимовключил это в info.plist:

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
...