gpt4 book ai didi

json - 在 Swift 中使用 ObjectMapper 中的 TranfsformType 映射类对象

转载 作者:行者123 更新时间:2023-11-30 10:50:04 29 4
gpt4 key购买 nike

我有一个 JSON

{
"code": 200,
"status": "success",
"data": [
{
"cardTypeId": 1,
"cardInfo": {
"background": "#4267b2",
"userName": "abkur_rt",
"text": "Hello Video",
"media": {
"mediaUrl": "",
"mediaType": "image",
"mediaThumbUrl": ""
}
}
},
{
"cardTypeId": 4,
"cardInfo": {
"text": "Image and text",
"media": {
"mediaUrl": "",
"mediaType": "image",
"mediaThumbUrl": ""
}
}
}
]
}

为了解析这个,我使用了 ObjectMapper( https://github.com/tristanhimmelman/ObjectMapper )我的查询是,在我的 JSON 中,我根据 cardTypeId 获取 cardInfo 因此,我创建了引用此链接 ObjectMapper how to map different object based on JSON 的类。了解如何使用类的自定义 TransformType。在链接的 JSON 响应中,有数组,但在我的情况下,如果 cardTypeId 为 1,则有 2 个额外字段,与 cardInfo 中的所有内容相同。所以我创建了如下类,但我不确定如何创建继承 TransFormType 的类。

class LBDetailsList: Mappable {

var lbListArray : [LBDetail]?

required init?(map: Map) {

}

func mapping(map: Map) {
lbListArray <- map ["data"]
}
}
class LBDetail: Mappable {
var cardTypeID : Int?
var cardInfo: LBBaseCardInfo?

required init?(map: Map) {

}

func mapping(map: Map)
{
cardInfo <- map["cardInfo"]
}
}
class LBBaseCardInfo: Mappable {

var text: String?
var media: LBMedia?

required init?(map: Map) {

}

func mapping(map: Map) {
text <- map["text"]
media <- map["media"]
}
}
class CardType1: LBBaseCardInfo {

var background, userName : String?

required init?(map: Map) {
super.init(map: map)
}

override func mapping(map: Map) {
super.mapping(map: map)
background <- map["background"]
userName <- map["userName"]
}
}
class CardType2: LBBaseCardInfo {

required init?(map: Map) {
super.init(map: map)
}

override func mapping(map: Map) {
super.mapping(map: map)
}
}
class LBMedia: Mappable {

var mediaURL: String?
var mediaType: String?
var mediaThumbURL: String?

required init?(map: Map) {

}

func mapping(map: Map) {
mediaURL <- map["mediaUrl"]
mediaType <- map["mediaType"]
mediaThumbURL <- map["mediaThumbUrl"]
}
}

请帮助我理解这个框架。

最佳答案

您需要按照以下方式创建。

1) 基类:

struct BaseClass : Mappable {
var code : Int?
var status : String?
var data : [CardData]?

init?(map: Map) {

}

mutating func mapping(map: Map) {

code <- map["code"]
status <- map["status"]
data <- map["data"]
}
}

2) 卡片数据:

struct CardData : Mappable {
var cardTypeId : Int?
var cardInfo : CardInfo?

init?(map: Map) {

}

mutating func mapping(map: Map) {

cardTypeId <- map["cardTypeId"]
cardInfo <- map["cardInfo"]
}
}

3) 媒体:

struct Media : Mappable {
var mediaUrl : String?
var mediaType : String?
var mediaThumbUrl : String?

init?(map: Map) {

}

mutating func mapping(map: Map) {

mediaUrl <- map["mediaUrl"]
mediaType <- map["mediaType"]
mediaThumbUrl <- map["mediaThumbUrl"]
}
}

4) 卡信息:

struct CardInfo : Mappable {
var background : String?
var userName : String?
var text : String?
var media : Media?

init?(map: Map) {

}

mutating func mapping(map: Map) {

background <- map["background"]
userName <- map["userName"]
text <- map["text"]
media <- map["media"]
}
}

我根据您的 json 创建了以下可映射结构。如果你的 json 不包含任何键,那么它将用 nil 值解析 json。

对于您的 CardInfo 我设置了 var text : String? 这意味着,如果没有可用的此键,则将使用 nil 解析 json。所以当你使用这个时,你必须要求在解包之前检查不为nil。

希望这对您有帮助。

关于json - 在 Swift 中使用 ObjectMapper 中的 TranfsformType 映射类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54782782/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com