Когда вы определяете CodingKeys
, вам нужно предоставить ключ для каждого необязательного / неинициализированного свойства, чтобы компилятор знал, как инициализировать при декодировании. Если применить это к Video
, то это будет выглядеть так:
struct Video: Codable {
var title: String
var description: String
var url: URL
var thumbnailImageURL: URL
var numberOfLikes: Int {
return likes.value
}
private var likes: StringBacked<Int>
enum CodingKeys: String, CodingKey{
case title = "xxx"
case description = "jjjj"
case url = "url"
case thumbnailImageURL = "jjjjjjjj"
case likes = "jjjjjkkkk"
}
}
Если вы внимательно посмотрите, это свойство private var likes: StringBacked<Int>
не было предоставлено ни в одном CodingKey
в перечислении, поэтому компилятор жаловался. Я обновил перечисление с этим регистром case likes = "jjjjjkkkk"
и удалил case numberofLikes = "jjjjjkkkk"
, потому что numberofLikes
является вычисляемым свойством только для чтения, которое не требует анализа.