Ios 缺少参数'的参数;从';随时待命。插入';发件人:<#解码器#>';

Ios 缺少参数'的参数;从';随时待命。插入';发件人:<#解码器#>';,ios,swift,Ios,Swift,我正在尝试创建一个可编码结构的新实例 @State private var parcel = Parcel() 但我得到了一个错误: 调用中缺少参数“from”的参数 插入“发件人:” Swift中的每个对象都需要一个初始值设定项:一些代码用于在首次创建对象时设置该对象。如果对象是类的实例,则需要显式定义初始值设定项。但是,如果对象是结构的实例,则Swift会隐式定义初始值设定项。例如,这个结构 struct Foo { let bar: Int } 隐式获取如下所示的初始值设定项 i

我正在尝试创建一个可编码结构的新实例

@State private var parcel = Parcel()
但我得到了一个错误:

调用中缺少参数“from”的参数 插入“发件人:”


Swift中的每个对象都需要一个初始值设定项:一些代码用于在首次创建对象时设置该对象。如果对象是类的实例,则需要显式定义初始值设定项。但是,如果对象是结构的实例,则Swift会隐式定义初始值设定项。例如,这个结构

struct Foo {
  let bar: Int
}
隐式获取如下所示的初始值设定项

 init(bar: Int) {
   self.bar = bar
 }
init(from decoder: Decoder) throws {
  // decode a key value pair with name "bar" and an Int value using decoder
  let decodedBar = try ...
  self.init(bar: decodedBar)
}
初始值设定项也可以通过协议扩展隐式创建。这意味着如果您的结构继承了一个协议(例如
Codable
),该协议可以为您定义其他初始值设定项。对于这个简单的示例,
Codable
将添加如下内容

 init(bar: Int) {
   self.bar = bar
 }
init(from decoder: Decoder) throws {
  // decode a key value pair with name "bar" and an Int value using decoder
  let decodedBar = try ...
  self.init(bar: decodedBar)
}
在您的例子中,当您编写
parcel=parcel()
时,您正在调用这种初始值设定项

init() {
  // initialize somehow with no input!
}
但你从来没有定义过这样的事情!编译器建议您调用从
Codable
获得的initalizer,因为它非常匹配,但这可能也不是您想要的

您可以定义缺少的初始值设定项,也可以为所有结构的成员定义默认值。如果这样做,Swift定义的隐式初始值设定项将没有参数,从而使代码有效。比如说

struct Foo {
  let bar: Int = 3
}

let f = Foo() // now this is valid, implicit init has no arguments

您不能这样调用
Parcel()
(即
Parcel.init()
)不是吗?属性的值是什么?根本的问题是
地块
在我看来是一个
@状态
属性。噢,哇。非常感谢,这真是太棒了helpful@cjay如果你觉得我的答案有用,你能投票接受吗?