繁体   English   中英

如何创建 Codable Struct 的实例?

[英]How can I create an instance of a Codable Struct?

我正在绕圈子试图使用 Codable Struct。 我几乎可以让它工作,但最后我得到一个错误。

这是一个简单的例子:

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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM