我有一个函数,当用户点击应用程序内部的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网络电话中发送用户名和密码作为参数。欢迎任何指导。
答案 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)
创建一个参数字符串并转换如下
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
}