Я пытаюсь получить свои данные из Contentful
в моем приложении Swift
, но застрял при получении dictionary
.
ОБНОВЛЕНИЕ : тип - Link & linkType - Entry. Поэтому мне нужно декодировать ссылку на запись.
Итак, в моих содержательных данных для Item A
у меня есть:
"itemB": {
"sys": {
"type": "Link",
"linkType": "Entry",
"id": "id_is_here"
}
},
Но в моем коде мой itemB
равен nil
.
Вот что я пробовал:
// Item A
class ItemA: EntryDecodable, FieldKeysQueryable {
static let contentTypeId: String = "ItemA"
// FlatResource Memberes.
let id: String
var updatedAt: Date?
var createdAt: Date?
var localeCode: String?
var itemB: ItemB?
public required init(from decoder: Decoder) throws {
let sys = try decoder.sys()
id = sys.id
localeCode = sys.locale
updatedAt = sys.updatedAt
createdAt = sys.createdAt
let fields = try decoder.contentfulFieldsContainer(keyedBy: FieldKeys.self)
try fields.resolveLink(forKey: .itemB, decoder: decoder) { [weak self] item in
self?.itemB = item as? ItemB
}
}
enum FieldKeys: String, CodingKey {
case itemB
}
public init(sys: Sys, itemB: ItemB?) {
id = sys.id
localeCode = sys.locale
updatedAt = sys.updatedAt
createdAt = sys.createdAt
self.itemB = itemB
}
}
// Item B
class ItemB: EntryDecodable, FieldKeysQueryable {
static let contentTypeId: String = "ItemB"
// FlatResource Memberes.
let id: String
var updatedAt: Date?
var createdAt: Date?
var localeCode: String?
let name: String?
public required init(from decoder: Decoder) throws {
let sys = try decoder.sys()
id = sys.id
localeCode = sys.locale
updatedAt = sys.updatedAt
createdAt = sys.createdAt
let fields = try decoder.contentfulFieldsContainer(keyedBy: FieldKeys.self)
self.name = try fields.decode(String.self, forKey: .name)
}
enum FieldKeys: String, CodingKey {
case name
}
public init(sys: Sys, name: String) {
id = sys.id
localeCode = sys.locale
updatedAt = sys.updatedAt
createdAt = sys.createdAt
self.name = name
}
}