类型 'DBTweet' 不符合协议 'Decodable'
Type 'DBTweet' does not conform to protocol 'Decodable'
我希望我的结构符合 decodable,但尽管我符合它,但我总是收到此错误。
Type 'DBTweet' does not conform to protocol 'Decodable'
这是我的代码:
struct DBTweet {
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]
}
extension DBTweet: Decodable {
enum MyStructKeys: String, CodingKey { // declaring our keys
case user, tweetID, content, postedImageURL, timestamp, comments
}
init(from decoder: Decoder) throws {
}
}
您还没有实现 init(from: Decoder)。
如果您的所有模型 属性 都符合 Codable to.
,您也可以使您的模型符合 Codable(Decodable) 而无需实施它们
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
[更新]
随着初始化:
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)
}
}
我希望我的结构符合 decodable,但尽管我符合它,但我总是收到此错误。
Type 'DBTweet' does not conform to protocol 'Decodable'
这是我的代码:
struct DBTweet {
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]
}
extension DBTweet: Decodable {
enum MyStructKeys: String, CodingKey { // declaring our keys
case user, tweetID, content, postedImageURL, timestamp, comments
}
init(from decoder: Decoder) throws {
}
}
您还没有实现 init(from: Decoder)。 如果您的所有模型 属性 都符合 Codable to.
,您也可以使您的模型符合 Codable(Decodable) 而无需实施它们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
[更新] 随着初始化:
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)
}
}