2017-03-08 44 views
0

我有一个自定义的ObjectMapper类。 我想基于数据将元素映射到不同的对象类型。 我已经实现了如下的逻辑。但它不给我的价值,只有空。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" }] }

+0

你能分享一个JSON响应吗? –

+0

@anilkukdeja添加样本json –

+0

请查看我的答案。 –

回答

0

我想你应该保存整个数组对象。

这里让我们转到您的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() 

} 

之后,你可以迭代你的数组对象并比较类型。让我知道你是否需要任何进一步的帮助。

+0

我也为此准备了seprate演示。让我知道你是否需要演示。 –