我有一个自定义的ObjectMapper类。 我想根据数据将元素映射到不同的对象类型。 我已经实现了如下的逻辑。但是它没有给我这些值,只有null。
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 :(得分: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()
}
之后,您可以遍历数组对象并比较类型。如果您需要任何进一步的帮助,请告诉我。
答案 1 :(得分:0)
Anil的答案不是正确/有效的方法,您将在一次映射迭代后重新处理数据集。 您需要为映射定义自己的变换。检查一下:How to map different type using ObjectMapper?