構造体の初期化でエラーが発生します。以下のスクリーンショットを参照してください。デバッグ後、構造体にレビュー変数を含めると問題が発生することがわかりました。何が間違っているのかわかりません。誰も私を助けることができますか?
Tx
あなたがそれを試してみる必要がある場合に備えて、私はコードをコピーしています
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()
}
}
レビューにはデフォルト値がありません。これを変更する必要があります
var profileValue = ProfileValue()
に
var profileValue:ProfileValue?
[〜#〜] or [〜#〜]
var review: ReviewValues?
[〜#〜] or [〜#〜]
init
構造体にProfileValue
メソッドを指定します
ProfileValue
構造体には、review
プロパティのデフォルト値がありません。これが、オプションではないすべてのプロパティにデフォルト値を提供せずにProfileValueのインスタンスを作成しようとしているため、コンパイラが不満を抱いている理由です。
補足として、すべてのコーディングキー列挙値はプロパティ名と一致します。名前が同じ場合は、コーディングキーの列挙を含める必要はありません。
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()
}
}
デフォルトのinitメソッドを追加して、コード化可能なモーダルでデフォルトのinitメソッドを提供し、エンコードされたオブジェクトを作成します。
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"
}
}