Как преобразовать Optional<Dictionary<String, Any>> в Dictionary<String, Any> для отправки пост-запроса Alamofire (5.4.4) с параметрами json?
class func postLoginRequest(url: String, parameters: Parameters?, success: @escaping (Any) -> Void, failure: @escaping (NetworkError) -> Void) {
if Network.isAvailable {
let param : [String : Any] = [
"username" : "x",
"password" : "x"
]
print (type(of: param))
print(param)
print(type(of: parameters))
print(parameters)
let manager = Alamofire.Session.default
manager.session.configuration.timeoutIntervalForRequest = Constants.NetworkError.timeOutInterval
manager.request(url, method: .post, parameters: param, encoding: JSONEncoding.default ).validate(statusCode: 200..<600).responseJSON { (response) -> Void in ...
Мои данные выводятся как показано ниже;
Dictionary<String, Any>
["username": "x", "password": "x"]
Optional<Dictionary<String, Any>>
Optional(["username": Optional(<TextFieldEffects.HoshiTextField: 0x11c054600; baseClass = UITextField; frame = (41 10; 286 40); text = 'x'; opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x2821b45d0>; layer = <CALayer: 0x282f855c0>>), "password": Optional(<TextFieldEffects.HoshiTextField: 0x11c043600; baseClass = UITextField; frame = (41 10; 286 40); text = 'x'; opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x2821afe40>; layer = <CALayer: 0x282f849c0>>)])
Когда я использую param в качестве параметра, проблем нет. Я могу получить имя пользователя и пароль в бэкенде (DJango) для jwt auth. Но не могу, когда использую параметры как значение параметров. Как можно сделать это преобразование для отправки данных json body.
Для преобразования чего-либо из Optional в Type необходимо безопасно развернуть
let myDict: [String : Any]? = ["john" : "Appleseed"]
// 1. Using guard statements
guard let unwraped: [String : Any] = myDict else {
// The value is nil
return
}
// 2. Using if statements
if let unwraped: [String : Any] = myDict {
// unwraped value
}
else {
// The value is nil
}
// 3. Using force unwrap (be careful, this will crash your app if myDict is nil)
let unwraped = myDict!
Моя ошибка в том, что я отправил UITextField как значение. Я пропустил это. Сначала я исправил это. После этого я использую URLEncoding.httpBody для кодирования данных.
if Network.isAvailable {
let manager = Alamofire.Session.default
manager.session.configuration.timeoutIntervalForRequest = Constants.NetworkError.timeOutInterval
manager.request(url, method: .post, parameters: parameters, encoding: URLEncoding.httpBody ).validate(statusCode: 200..<600).responseJSON { (response) -> Void in
Спасибо.