如何在 AlamofireObjectMapper 中映射对象
Posted
技术标签:
【中文标题】如何在 AlamofireObjectMapper 中映射对象【英文标题】:How to map object in AlamofireObjectMapper 【发布时间】:2016-04-26 12:08:59 【问题描述】:在我的应用程序中,我使用 AlamofireObjectMapper 进行映射。我第一次使用这个。这是我从 API 得到的回复
Message = "email verification link has been sent to your email. please verify your account.";
Result =
"V002_vendors_type" = "<null>";
"V003_pharmacy" = ();
"V010_subscription" = "<null>";
"attempt_date" = "<null>";
created = "2016-04-26T11:07:30.3192745+00:00";
email = "abc@gmail.com";
"first_name" = abc;
id = 10167;
"is_lock" = 0;
"last_name" = "<null>";
mobile = 9999999999;
password = xxxxxxxxx;
"profile_Image" = "<null>";
status = PV;
subscription = 1;
updated = "2016-04-26T11:07:30.3192745+00:00";
"Fix_id" = 1;
;
Status = 1;
现在这是我的代码
func pharmacySignUp()
let url = "http://\(basicURL)vendor_signup"
let param :[String : AnyObject] =
[
"email" : txtemail.text!,
"password" : txtpassword.text!,
"mobile" : txtmobile.text!,
"first_name" : txtname.text!
]
Alamofire.request(.POST, url, parameters: param, encoding: .JSON).responseObject (response:Response<signupVarificationCode, NSError>) in
print(response.result.value)
let signupVarificationCode = response.result.value
print(signupVarificationCode)
print(signupVarificationCode!.Message)
print(signupVarificationCode?.status)
这是我为映射制作的一个类
class signupVarificationCode: Mappable
var Message : String?
var status : String?
required init?(_ map: Map)
func mapping(map: Map)
Message <- map["Message"]
status <- map["Status"]
通过这段代码我可以得到消息,但现在我想映射 Result 对象,我该怎么做呢?
感谢 Yuvraj Sinh 它的工作,但我想从 Result 对象访问所有变量,所以我制作了这个对象
class Result: Mappable
var lastName : String?
var mobile : String?
var id: String?
required init?(_ map: Map)
func mapping(map: Map)
lastName <- map["last_name"]
mobile <- map["mobile"]
id <- map["id"]
我想在我的 pharmacySignup 方法中打印移动值。那么我该怎么做呢?
【问题讨论】:
【参考方案1】:由于 API 响应中的 Result 参数代表另一个 JSON 对象,因此应使用 Dictionary 进行映射。您可以将当前的 signupVarificationCode 替换为以下内容。
class signupVarificationCode: Mappable
var Message : String?
var status : String?
var result : [String:AnyObject]?
required init?(_ map: Map)
func mapping(map: Map)
Message <- map["Message"]
status <- map["Status"]
result <- map["Result"] as! [String:AnyObject]
如果你想更多地面向对象,那么你可以为Result
创建单独的类,并且可以以相同的方式使用。
【讨论】:
【参考方案2】:var result:[String:AnyObject] = map[“Result”] as! [String:AnyObject]
// 这里你得到字典的结果 通过使用这个 dict 你可以得到任何键值对 // 这只是一个正常的解析,希望它能正常工作
【讨论】:
感谢好友它的工作,但它给了我一个完整的对象,但我想访问对象的所有变量,如 id、密码、电子邮件,所以我可以这样做吗?? 当您获得对象时,您再次对所需的值执行相同操作,例如:email = "abc@gmail.com";如果 let emailID = result["email"] as 则从数据中获取字符串类型?字符串 for "Id" eg // if let idValue = result["id"] as? Int /// print(idValue) 你没有得到我的问题。请再次阅读我的问题,我已经更新了它。如果有任何解决方案,请告诉我 在收到消息和状态后听你的字典对象中的所有值都带有结果,所以从结果对象中获取值,就像我从结果中获取 id 一样。【参考方案3】:你必须相信其他称为 Result 的可映射类
class signupVarificationCode: Mappable
var Message : String?
var status : String?
var result : Result?
required init?(_ map: Map)
func mapping(map: Map)
Message <- map["Message"]
status <- map["Status"]
result <- map["Result"]
class Result: Mappable
var mobile: String?
required init?(_ map: Map)
func mapping(map: Map)
//Mapping attributtes for example
mobile <- map["mobile"]
【讨论】:
以上是关于如何在 AlamofireObjectMapper 中映射对象的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire / AlamofireObjectMapper - 如何从 responseObject 打印错误 json?
如何使用 AlamofireObjectMapper 将 JSON 字典添加到领域
AlamofireObjectMapper.swift 第 74 行适用于 Playground,但不适用于设备或模拟器
如何使用 AlamoFireObjectMapper 动态映射 JSON 中的值,该值取决于同一 JSON 中的另一个值?