ios - 如何在 Alamofire 5 中的 responseDecodable 中获得响应
问题描述
我从 API 收到两个响应。
在失败的情况下
{"message":"Either your supplied Email ID or Password is incorrect","status":201,"data":{}}
在成功案例中
{
"status": 200,
"data": {
"access_token": "7a1bfe8c85ef81c635d7d14b9e335984",
"app_access_token": "168aa07e4966186447694e95e4127fb5",
}
}
我正在使用可选的decodeIfPresent将数据解析为单个结构。有没有更好的方法来解析数据而无需使用失败结构和成功结构?
任何指导总是值得赞赏
解决方案
你可以使用 swiftJSON pod 并在 JSON 中解析数据这是我为我的 api 响应所做的并在 json 中处理它你可以使用和编辑你的方式
func ProfileApi(url : String , parameters : [String : String]){
Alamofire.request(url , method : .post , parameters : parameters).responseJSON { (response) in
if response.result.isSuccess
{
print("API data recived")
let DiseaseCatagory : JSON = JSON(response.result.value!)
// print(plotCatagory[0]["name"])
//self.SelectedLevelIDArray = []
if let data = DiseaseCatagory.dictionaryObject
{
if let error = data["error_code"] as? Int{
print(error)
if error == 0{
if let data1 = data["data"] as? [String : Any]
{
print(data1)
if let PostDataRecieved = data1["about"] as? [[String : Any]]
{
print(PostDataRecieved)
var i = 0
while(i < PostDataRecieved.count){
self.ProfileName = PostDataRecieved[i]["first_name"] as! String
self.ProfileGender = PostDataRecieved[i]["gender"] as! String
self.ProfileEmail = PostDataRecieved[i]["email"] as! String
self.ProfileCountry = PostDataRecieved[i]["country"] as! String
self.ProfileDOB = PostDataRecieved[i]["dob"] as! String
self.profileImageUrl = PostDataRecieved[i]["profile_picture"] as! String
if let lastName = PostDataRecieved[i]["last_name"] as? String{
self.profileLastName = lastName
self.LastNameTextField.text = lastName
}
i = i + 1
}
}
self.AssignValues()
DispatchQueue.main.async {
self.hud.dismiss(afterDelay: 0.5)
}
}
}else{
if let error = data["error_string"] as? String{
let signUpAlert = UIAlertController(title: "Signup Error!", message: error, preferredStyle: .alert)
let okButton = UIAlertAction(title: "ok", style: .default, handler: nil)
signUpAlert.addAction(okButton)
self.present(signUpAlert, animated: true, completion: nil)
}
DispatchQueue.main.async {
self.hud.dismiss(afterDelay: 0.5)
}
}
}
}
}
else
{
print("Error : \(response.result.error)")
let signUpAlert = UIAlertController(title: "Connection Error!", message: "Please check internet connection and try again", preferredStyle: .alert)
let okButton = UIAlertAction(title: "ok", style: .default, handler: nil)
signUpAlert.addAction(okButton)
self.present(signUpAlert, animated: true, completion: nil)
}
}
}
这是我正在处理的 JSON 响应
{"error_code":0,"error_string":"","data":{"about":[{"id":"2","user_name":"","first_name":"Mazeda","last_name":"Khanam","mobile_no":"07387276289","email":"mazedakhanam@yahoo.co.uk","profile_picture":"user_icon.jpeg","gender":"female","profession":"Mum","dob":"1984-09-06","mood_status":"Hey There!","registered_time":"0000-00-00 00:00:00","account_verified":"1","login_flag":"1","country":"United Kingdom","added_time":"2017-02-23 15:42:54","status":"1","android_push_token":"","ios_push_token":""}],"photo":[]}}
推荐阅读
- javascript - 动作必须是普通对象。使用自定义中间件在测试库而不是 App 上进行异步操作
- asp.net-mvc - 为 IEnumerable 中的每个模型创建一个编辑表单
ASP.NET MVC - json - 序列化 JSON 字符串上的尾随“r”
- oracle - 将 blob 上传到 Oracle 数据库时法语字符被损坏
- python - 我们可以删除 delta 湖中最新版本的 delta 表吗?
- c# - JSON.NET 序列化为父类型
- expo - 开始开发移动/网络前端到外部数据库
- python - 模块六没有属性 ensure_text
- python - Discord.py 检查用户是否注册了他们的帐户
- gitlab - 如何将 Dockerfile 中的值传递回 GitLab-CI 管道?