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如果你觉得我的答案有用,你能投票接受吗?