我已经在这里看到许多其他类似的问题,但是我找不到我的案子-如果我错过了明显的事情,我深表歉意!
我有一个'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提供手动操作的方法。
非常感谢任何指导!
答案 0 :(得分:1)
问题在于您的Dictionary
中的值是Tuple
,而元组不符合Codable
。遗憾的是,由于Tuple
是非标称类型,因此您甚至无法扩展它们,因此您将不得不切换到另一种数据类型或自己实现编码和解码方法。
我建议使用自定义struct
而不是元组,例如
struct TransactionAmount<Currency>: Codable {
let amount: Money<Currency>
let setByUser: Bool
}
然后在您的Transaction
类中,
var splitTransaction: [String:TransactionAmount<GBP>]? {...