ObjectMapper 条件映射整个元素
Posted
技术标签:
【中文标题】ObjectMapper 条件映射整个元素【英文标题】:ObjectMapper conditional mapping whole element 【发布时间】:2017-03-08 12:29:02 【问题描述】:我有一个自定义的 ObjectMapper 类。 我想根据数据将元素映射到不同的对象类型。 我已经实现了如下的逻辑。但它没有给我价值,只有空值。
class FeedObject : Object, Mappable
dynamic var post : HomeDataModel?
dynamic var friends : Friends?
required convenience init?(map: Map)
self.init()
func mapping(map: Map)
var Mtype = ""
Mtype <- map["type"]
print("TYPEEEEEE", Mtype)
if Mtype == "FRIENDS"
friends <- map
else
post <- map
如何实现这种映射?
示例 Json -
"feed_objects": [
"type": "NORMAL",
"status": "none",
"invited": false,
"comment": "hello",
"time": "00:12"
,
"type": "NORMAL",
"status": "none",
"invited": true,
"comment": "How are you?",
"time": "04:15"
,
"type": "FRIENDS",
"display_text": "Your friends are here.",
"count": 23
,
"type": "NORMAL",
"status": "verified",
"invited": true,
"comment": "great",
"time": "09:32"
]
【问题讨论】:
你能分享一个 JSON 响应吗? @anilkukdeja 添加了示例 json 请查看我的回答。 【参考方案1】:我认为你应该存储整个数组对象。
这里让我们转到您获得响应的 Web 服务解析方法。
if let responseValue = response.result.value as? [String:AnyObject]
if let feedObject = Mapper<Feed>().mapArray(JSONArray:data)
print(feedObject)
定义你的 Feed 类是这样的。
import ObjectMapper
class Feed: Mappable, CustomStringConvertible
required init?(map: Map)
func mapping(map: Map)
type <- map["type"]
status <- map["status"]
comment <- map["comment"]
time <- map["time"]
invited <- map["invited"]
var description: String
get
return Mapper().toJSONString(self, prettyPrint: false)!
var type:String = String()
var status:String = String()
var comment:String = String()
var time:String = String()
var invited : Bool = Bool()
之后,您可以遍历数组对象并比较类型。如果您需要任何进一步的帮助,请告诉我。
【讨论】:
我也为此准备了单独的演示。如果您需要演示,请告诉我。【参考方案2】:Anil 的答案不是正确/有效的方法,您将在一次映射迭代后重新处理数据集。 您需要为映射定义自己的转换。看看这个:How to map different type using ObjectMapper?
【讨论】:
以上是关于ObjectMapper 条件映射整个元素的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 嵌套对象的映射 (Objectmapper)
ObjectMapper 如何基于 JSON 映射不同的对象
AlamofireObjectMapper / ObjectMapper 是不是支持结构类型映射