如何转换任何可用数据作为使用Alamofire进行API调用的参数发送?

时间:2018-04-18 07:59:16

标签: ios swift alamofire

我有一个函数,当用户点击应用程序内部的LOG IN时,我会调用该函数。我以Anyhashable格式输入用户输入的密码和用户名。 Alamofire调用是在userDataContent作为参数传递的地方进行的。 我的登录功能,

    func loginWithUserData(userData: Dictionary<String, Any> 
          ,completion: @escaping (_ success:DataResponse<Any>)->Void) {
           print("userDataContent in loginWithUsertDataCall: ", userData) 
NetworkManager.sharedNetworkManager.performNetworkOperation(url: myEndpoint().userSession(), httpmethod: .post, parameters: userData) { response in
        completion(response)
    }
}

我的下面是我的userData(包含用户名和密码),

    userDataContent in loginWithUsertDataCall:  
    ["user": 
        [AnyHashable("password"): <TextFieldValidator: 0x7fa94e89aa00; 
            baseClass = UITextField; 
            frame = (0 0; 155.333 23.3333);
            text = '**MYPASSWORD123**'; 
            opaque = NO;
            autoresize = RM+BM; 
            gestureRecognizers = <NSArray: 0x604000a468a0>; 
            layer = <CALayer: 0x604000833be0>>, 
        AnyHashable("email"): <TextFieldValidator: 0x7fa94e90be00; 
            baseClass = UITextField; 
            frame = (0 0; 263.667 23.3333); 
            text = '**myloginEmail@test.com'**; 
            opaque = NO; 
            autoresize = RM+BM; 
            gestureRecognizers = <NSArray: 0x604000a547f0>; 
            layer = <CALayer: 0x604000638840>>
        ]
    ]

我的问题是,如何修改Anyhashable,以便我可以在我正在制作的Alamofire网络电话中发送用户名和密码作为参数。欢迎任何指导。

2 个答案:

答案 0 :(得分:3)

我知道你有一个名为UITextField的{​​{1}}子类。

你这样做:

TextFieldValidator

相反,你应该这样做:

let userData = ["user": ["password": myTextFieldValidatorForPassword,
                         "email": myTextFieldValidatorForEmail]]

因为您对这些文本字段的let userData = ["user": ["password": myTextFieldValidatorForPassword.text, "email": myTextFieldValidatorForEmail.text]] 值感兴趣,而不是对UI对象感兴趣。您可以使用任何UI对象,您的API并不关心它,它关心字符串值。

答案 1 :(得分:0)

创建一个参数字符串并转换如下

enter image description here

     let ParameterString = "{\"auth\":{\"email\":\"\(ws_email)\",\"password\":\"\(ws_password)\"},\"emailId\":\"\(EmailId)\"}"

    let parameters = self.convertToDictionary(text: ParameterString)
    static func convertToDictionary(text: String) -> [String: Any]? {

        if let data = text.data(using: .utf8) {
            do {
                return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
            } catch {
                print(error.localizedDescription)
            }
        }
        return nil
    }