我正在尝试创建可编码结构的新示例
@State private var parcel = Parcel()
字符串
但我得到了这个错误:
调用Insert“from:<#Decoder#>”中缺少参数“from”的参数
struct Parcel: Codable {
var created_at: String
var height: Double
var id: String
var length: Double
var mode: String?
var object: String
var predefined_package: String?
var updated_at: String?
var weight: Double
var width: Double
}
型
3条答案
按热度按时间mefy6pfw1#
Swift中的每个对象都需要一个初始化器:在第一次创建对象时设置对象的一些代码。如果你的对象是一个类的示例,初始化器需要由你显式定义。但是如果对象是一个 struct 的示例,Swift隐式定义一个初始化器。例如,这个struct
字符串
隐式地获取一个初始化器,如下所示:
型
初始化器也可以通过协议扩展隐式创建。这意味着如果您的结构继承了一个协议(如
Codable
),该协议可以为您定义额外的初始化器。对于这个简单的示例,Codable
将添加如下内容。型
在您的例子中,当您编写
parcel = Parcel()
时,您正在调用这种初始化器型
编译器建议你调用从
Codable
得到的初始化器,因为它是一个近似匹配,但这可能也不是你想要的。你可以定义缺少的初始化器,或者为结构体的所有成员定义默认值。如果你这样做,Swift定义的隐式初始化器将没有参数,使你的代码有效。例如
型
oyjwcjzk2#
默认情况下,结构体会在后台为你声明的每个非可选属性创建一个初始化器。所以通过简单地创建一个结构体的示例,你需要包含它所需要的所有非可选值。如果你不想在初始化它时添加值,可以将它们改为vars并使它们成为可选的(在末尾添加?)。
xkftehaa3#
如果你在包的内部写了你的“struct”,并且想在外部创建一个对象,那么让init公开。