首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift中与其他协议的可解码一致性

Swift中与其他协议的可解码一致性
EN

Stack Overflow用户
提问于 2020-08-05 09:09:23
回答 2查看 205关注 0票数 0

问题是当一个结构符合协议(让我们称它为PA)和可解码时,但是PA强加了一个类型为不可解码的属性。示例:

代码语言:javascript
复制
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 {}

上述代码拒绝编译,因为:

'Decodable'

  • note:错误:键入'SA‘不符合协议

  • 无法自动合成’可解码‘,因为'PB?’不符合“可解码”

将这一行改为:

代码语言:javascript
复制
let b: [PB & Decodable]?

也不起作用,并给出:

'Decodable'

  • note:错误:类型'SA‘不符合协议’PA‘

  • 注意:候选人的非匹配类型’可解码& PB?‘

  • 错误:类型'SA’不符合协议

  • 无法自动合成‘可解码’,因为‘可解码&PB?’不符合'Decodable'

  • note:协议要求属性'b‘类型为'PB?';要添加存根吗?

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

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2020-08-05 11:19:59

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

代码语言:javascript
复制
protocol PADecodable {
    var b: [PB & Decodable]? { get }
}

struct SA: PADecodable {
    let b: [PB & Decodable]?
}
票数 1
EN

Stack Overflow用户

发布于 2020-08-05 09:26:21

你可以通过以下方法来修复它:

代码语言:javascript
复制
protocol PA {
    var b: [PB]? { get }
}

protocol PB {}

struct SA<T: PB & Codable>: PA, Codable {
    private var _b: [T]?
    
    var b: [PB]? {
        return _b
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63261881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档