Как преобразовать 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

Спасибо.

Вернуться на верх