Je reçois une erreur lors de l'initialisation d'une structure, veuillez voir la capture d'écran ci-dessous. Après le débogage, j'ai trouvé que l'inclusion d'une variable de révision dans la structure pose problème. Je ne peux pas comprendre ce que je fais mal. Quelqu'un peut m'aider?
Tx
Je copie du code au cas où vous auriez besoin de l'essayer
import UIKit
struct RootValue : Decodable {
private enum CodingKeys : String, CodingKey {
case success = "success"
case content = "data"
case errors = "errors"
}
let success: Bool
let content : [ProfileValue]
let errors: [String]
}
struct ProfileValue : Decodable {
private enum CodingKeys : String, CodingKey {
case id = "id"
case name = "name"
case review = "review" // including this gives error
}
var id: Int = 0
var name: String = ""
var review: ReviewValues // including this gives error
}
struct ReviewValues : Decodable{
private enum CodingKeys : String, CodingKey {
case place = "place"
}
var place: String = ""
}
class ViewController: UIViewController {
var profileValue = ProfileValue()
override func viewDidLoad() {
super.viewDidLoad()
}
}
La révision n'a pas de valeur par défaut, vous devez la modifier
var profileValue = ProfileValue()
à
var profileValue:ProfileValue?
OU
var review: ReviewValues?
OU
supply init
méthode dans ProfileValue
struct
Votre structure ProfileValue
n'a pas de valeur par défaut pour la propriété review
. C'est pourquoi le compilateur n'est pas satisfait, car vous essayez de créer une instance de ProfileValue sans fournir de valeurs par défaut pour toutes les propriétés non facultatives.
En remarque, toutes vos valeurs d'énumération de clé de codage correspondent simplement aux noms de propriété. Vous n'avez pas besoin d'inclure l'énumération des clés de codage si les noms sont identiques.
Ajoutez une init à votre structure ProfileValue:
struct ProfileValue : Decodable {
private enum CodingKeys : String, CodingKey {
case id = "id"
case name = "name"
case review = "review" // including this gives error
}
var id: Int = 0
var name: String = ""
var review: ReviewValues // including this gives error
init() {
self.review = ReviewValues()
}
}
Ajoutez la méthode init par défaut pour fournir la méthode init par défaut en modal codable pour créer l'objet codé.
struct Modal: Codable {
var status: String?
var result : [Result?]?
// To provide the default init method to create the encoded object
init?() {
return nil
}
private enum CodingKeys: String, CodingKey {
case status = "status"
case result = "result"
}
}