После просмотра используемого 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>