如何使包含元组的字典符合可编码要求?

时间:2019-05-20 11:01:36

标签: swift dictionary codable

我已经在这里看到许多其他类似的问题,但是我找不到我的案子-如果我错过了明显的事情,我深表歉意!

我有一个'Transaction'类,其中包含一些属性,所有属性都符合可编码要求,并且可以很好地保存/加载。我刚刚添加了一个词典,并收到以下错误:类型“交易”不符合协议“可解码”和“可编码”。

字典是:

var splitTransaction: [String:(amount: Money<GBP>, setByUser: Bool)]? {

Money的来源:https://github.com/Flight-School/Money(Money已经符合可编码要求,并且我有其他类型的Money可以正常工作。

https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types中,我认为我必须使用编码键来对splitTransaction进行编码/解码,但这是否意味着我也必须对其他每个属性都具有一个编码键?然后提供一种对它们进行编码/解码的方法吗?还是有一种方法可以让所有其他属性自动进行编码/解码,而只是为splitTransaction提供手动操作的方法。

非常感谢任何指导!

1 个答案:

答案 0 :(得分:1)

问题在于您的Dictionary中的值是Tuple,而元组不符合Codable。遗憾的是,由于Tuple是非标称类型,因此您甚至无法扩展它们,因此您将不得不切换到另一种数据类型或自己实现编码和解码方法。

我建议使用自定义struct而不是元组,例如

struct TransactionAmount<Currency>: Codable {
    let amount: Money<Currency>
    let setByUser: Bool
}

然后在您的Transaction类中,

var splitTransaction: [String:TransactionAmount<GBP>]? {...