Вы не реализовали инициализацию (из: Декодер).Вы можете адаптировать свои модели к Codable (Декодируемым) также без их реализации, если все свойства вашей модели соответствуют Codable.
struct DBTweet: Codable {
private(set) public var user: DBUser
private(set) public var profileImage: UIImage?
private(set) public var tweetID: Int
private(set) public var content: String
private(set) public var postedImageURL: String?
private(set) public var timestamp: String
private(set) public var comments: [DBComment]
}
Убедитесь, что DBUser и DBComment соответствуют Codable
[ОБНОВЛЕНИЕ] С init:
struct DBTweet: Decodable {
private(set) public var user: DBUser
private(set) public var profileImage: UIImage?
private(set) public var tweetID: Int
private(set) public var content: String
private(set) public var postedImageURL: String?
private(set) public var timestamp: String
private(set) public var comments: [DBComment]
enum CodingKeys: String, CodingKey {
case user, tweetID, content, postedImageURL, timestamp, comments
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.user = try container.decode(DBUser.self, forKey: .user)
self.profileImage = nil // Construct here your profileImage
self.tweetID = try container.decode(Int.self, forKey: .tweetID)
self.content = try container.decode(String.self, forKey: .content)
self.postedImageURL = try container.decodeIfPresent(String.self, forKey: .postedImageURL)
self.timestamp = try container.decode(String.self, forKey: .timestamp)
self.comments = try container.decode([DBComment].self, forKey: .comments)
}
}