字母数字 ID 未映射但给出 Nil 输出
Alphanumeric ID not mapping but gives Nil output
所以,我在从我的 json 数据中正确映射我的 ID 属性时遇到了问题。我不太确定我错过了什么,因为我能够成功映射也具有相似数据的相似属性。
这是我创建的模型:
import Foundation
import ObjectMapper
enum ItemsModelEnum: String {
case kind = "kind"
case etag = "etag"
case id = "id"
}
struct ItemsModel: Mappable {
var kind: String!
var etag: String!
var id: String!
init?(map: Map) {
}
init(kind: String, etag: String, id: String) {
self.kind = kind
self.etag = etag
self.id = id
}
init() {
self.kind = ""
self.etag = ""
self.id = ""
}
mutating func mapping(map: Map) {
kind <- map[ItemsModelEnum.kind.rawValue]
etag <- map[ItemsModelEnum.etag.rawValue]
id <- map[ItemsModelEnum.id.rawValue]
}
}
这是我使用的映射代码:
do {
if let data = data,
let videoData = Mapper<ItemsModel>().map(JSONObject: try JSONSerialization.jsonObject(with: data, options: [])) {
completionHandler(videoData,(response as! HTTPURLResponse), error)
print("videoData Received Successfully")
}
} catch {
completionHandler(nil,(response as! HTTPURLResponse), error)
print("Error parsing json get video data: ", error.localizedDescription)
}
以下是我要映射的json数据:
{
"kind": "youtube#playlistItemListResponse",
"etag": "\"xxxxxxxxxxxxx"",
"pageInfo": {
"totalResults": 4,
"resultsPerPage": 10
},
"items": [
{
"kind": "youtube#playlistItem",
"etag": "\"xxxxxx"",
"id": "xxxxxx",
}
}
有趣的是,etag 属性已成功映射,但 id 属性却未成功映射,因为当我收到响应时它返回 nil。
知道可能是什么原因吗?
在我的 Xcode 中,当我打印我的对象时,我得到以下输出:
videoData的打印说明:
▿ ItemsModel
▿ kind : Optional<String>
- some : "youtube#playlistItemListResponse"
▿ etag : Optional<String>
- some : "\"Xxxxxxxxx""
- id : nil
您尝试获得 id
,但那里有 pageInfo
或 items
。您需要更深入地了解路径 ["items"][0]["id"]
您尝试直接从对象获取id,但您需要的对象位于更深的位置。
您需要为 main object
、具有键 "pageInfo"
的对象、具有键 "items"
.
的对象创建 3 个结构
所以,我在从我的 json 数据中正确映射我的 ID 属性时遇到了问题。我不太确定我错过了什么,因为我能够成功映射也具有相似数据的相似属性。
这是我创建的模型:
import Foundation
import ObjectMapper
enum ItemsModelEnum: String {
case kind = "kind"
case etag = "etag"
case id = "id"
}
struct ItemsModel: Mappable {
var kind: String!
var etag: String!
var id: String!
init?(map: Map) {
}
init(kind: String, etag: String, id: String) {
self.kind = kind
self.etag = etag
self.id = id
}
init() {
self.kind = ""
self.etag = ""
self.id = ""
}
mutating func mapping(map: Map) {
kind <- map[ItemsModelEnum.kind.rawValue]
etag <- map[ItemsModelEnum.etag.rawValue]
id <- map[ItemsModelEnum.id.rawValue]
}
}
这是我使用的映射代码:
do {
if let data = data,
let videoData = Mapper<ItemsModel>().map(JSONObject: try JSONSerialization.jsonObject(with: data, options: [])) {
completionHandler(videoData,(response as! HTTPURLResponse), error)
print("videoData Received Successfully")
}
} catch {
completionHandler(nil,(response as! HTTPURLResponse), error)
print("Error parsing json get video data: ", error.localizedDescription)
}
以下是我要映射的json数据:
{
"kind": "youtube#playlistItemListResponse",
"etag": "\"xxxxxxxxxxxxx"",
"pageInfo": {
"totalResults": 4,
"resultsPerPage": 10
},
"items": [
{
"kind": "youtube#playlistItem",
"etag": "\"xxxxxx"",
"id": "xxxxxx",
}
}
有趣的是,etag 属性已成功映射,但 id 属性却未成功映射,因为当我收到响应时它返回 nil。
知道可能是什么原因吗?
在我的 Xcode 中,当我打印我的对象时,我得到以下输出:
videoData的打印说明:
▿ ItemsModel
▿ kind : Optional<String>
- some : "youtube#playlistItemListResponse"
▿ etag : Optional<String>
- some : "\"Xxxxxxxxx""
- id : nil
您尝试获得 id
,但那里有 pageInfo
或 items
。您需要更深入地了解路径 ["items"][0]["id"]
您尝试直接从对象获取id,但您需要的对象位于更深的位置。
您需要为 main object
、具有键 "pageInfo"
的对象、具有键 "items"
.