首页 > 解决方案 > Swift 中与其他协议的可解码一致性

问题描述

问题是当结构符合协议(我们称之为 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 {}

上面的代码拒绝编译,其中:

将该行更改为:

let b: [PB & Decodable]?

也不起作用并给出:

请注意,第 4 行是无意义的:“'[Decodable & PB]?' 不符合‘可解码’”。等什么?

有什么建议吗?

标签: swiftprotocolscodabledecodable

解决方案


您可以创建一个混合协议:

protocol PADecodable {
    var b: [PB & Decodable]? { get }
}

struct SA: PADecodable {
    let b: [PB & Decodable]?
}

推荐阅读