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 是不是支持结构类型映射

如何使用 objectmapper 进行数组映射?

将 JSON 映射到我的模型数组 - ObjectMapper

swift Demo使用ObjectMapper映射json