iOS Swift Decodable: Error: Cannot invoke initializer for type with no arguments
iOS Swift Decodable: Error: Cannot invoke initializer for type with no arguments
我在初始化结构时遇到错误,请参阅下面的屏幕截图。调试后我发现在结构中包含 review 变量会产生问题。
我不知道我做错了什么。
谁能帮帮我?
发送
我正在复制代码,以防您需要尝试一下
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()
}
}
您的 ProfileValue
结构没有 review
属性 的默认值。这就是编译器不高兴的原因,因为您试图创建 ProfileValue 的实例而不为所有非可选属性提供默认值。
附带说明一下,您所有的编码键枚举值都与 属性 名称匹配。如果名称相同,则无需包含编码键枚举。
评论没有默认值,您需要更改此
var profileValue = ProfileValue()
至
var profileValue:ProfileValue?
或
var review: ReviewValues?
或
在 ProfileValue
结构
中提供 init
方法
向您的 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方法,在codable modal中提供默认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"
}
}
我在初始化结构时遇到错误,请参阅下面的屏幕截图。调试后我发现在结构中包含 review 变量会产生问题。 我不知道我做错了什么。 谁能帮帮我?
发送
我正在复制代码,以防您需要尝试一下
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()
}
}
您的 ProfileValue
结构没有 review
属性 的默认值。这就是编译器不高兴的原因,因为您试图创建 ProfileValue 的实例而不为所有非可选属性提供默认值。
附带说明一下,您所有的编码键枚举值都与 属性 名称匹配。如果名称相同,则无需包含编码键枚举。
评论没有默认值,您需要更改此
var profileValue = ProfileValue()
至
var profileValue:ProfileValue?
或
var review: ReviewValues?
或
在 ProfileValue
结构
init
方法
向您的 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方法,在codable modal中提供默认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"
}
}