如何创建可编码结构的实例



我正在周而复始地尝试使用可编码结构。我几乎可以让它发挥作用,但最后我犯了一个错误。

这里有一个简单的例子:

struct Stuff: Codable {
var title: String = ""
var code: Int = 0
struct Item {
var name: String
var value: Int
}
var items: [Item] = []
init(from decoder: Decoder) throws { }
func encode(to encoder: Encoder) throws { }
}
var items: [Stuff.Item] = []
items.append(Stuff.Item(name: "Apple", value: 1))
items.append(Stuff.Item(name: "banana", value: 2))
var stuff = Stuff(title: "test", code: 23, items: items)

在最后一行,我得到错误

中位置#1、#2、#3处的额外参数

很明显,嵌套结构是可以的。如果我删除:Codableinit()func encode(),它会像我预期的那样工作。

正确的方法是什么?

原因:

由于您已经实现了init(from:)初始化程序,因此默认的init不可用。

这就是为什么,它找不到init(title:,code:,items:)

解决方案:

手动执行初始化程序init(title:,code:,items:)。此外,还要使Item符合Codable

现在,struct Stuff必须看起来像

struct Stuff: Codable {
var title: String = ""
var code: Int = 0
struct Item: Codable {
var name: String
var value: Int
}

var items: [Item] = []
init(from decoder: Decoder) throws { }
func encode(to encoder: Encoder) throws { }

init(title: String, code: Int, items: [Item]) {
self.title = title
self.code = code
self.items = items
}
}

相关内容

  • 没有找到相关文章

最新更新