初始化结构时出现错误,请参见下面的屏幕截图。调试后,我发现在结构中包含review变量会产生问题。 我不知道我在做什么错。 有人可以帮我吗?
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()
}
}
答案 0 :(得分:5)
评论没有默认值,您需要更改此值
var profileValue = ProfileValue()
到
var profileValue:ProfileValue?
OR
var review: ReviewValues?
OR
在init
结构中提供ProfileValue
方法
答案 1 :(得分:3)
您的ProfileValue
结构没有review
属性的默认值。这就是为什么编译器不满意的原因,因为您正在尝试创建ProfileValue实例,而没有为所有非可选属性提供默认值。
请注意,您所有的编码键枚举值都与属性名称匹配。如果名称相同,则无需包括编码键枚举。
答案 2 :(得分:0)
向您的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()
}
}
答案 3 :(得分:0)
添加默认的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"
}
}