【发布时间】:2020-08-05 09:09:23
【问题描述】:
问题是结构符合协议(我们称之为 PA)和可解码,但 PA 强加了一个不可解码类型的属性。示例:
protocol PA {
var b: [PB]? { get }
}
protocol PB {}
struct SA: PA, Decodable {
let b: [PB]? // SA's conformance to Decodable wants this to be [Decodable], but PA's conformance imposes [PB]
}
struct SB: PB, Decodable {}
上面的代码拒绝编译,带有:
- 错误:“SA”类型不符合“Decodable”协议
- 注意:无法自动合成“Decodable”,因为“[PB]?”不符合“可解码”
将该行更改为:
let b: [PB & Decodable]?
也不起作用并给出:
- 错误:类型“SA”不符合协议“PA”
- 注意:候选有非匹配类型“[Decodable & PB]?”
- 错误:“SA”类型不符合“Decodable”协议
- 注意:无法自动合成“Decodable”,因为“[Decodable & PB]?”不符合“可解码”
- 注意:协议需要类型为“[PB]?”的属性“b”;要添加存根吗?
请注意,第 4 行是无意义的:“'[Decodable & PB]?'不符合‘可解码’”。等什么?
有什么建议吗?
【问题讨论】:
-
显而易见的解决方案是让 PB 符合 Decodable ,你为什么不能这样做?如果 PB 不能符合 Decodable 那么你想解码什么?
标签: swift protocols codable decodable