Swift 4.1 - 集合扩展要求 Element 符合 Encodable


protocol CodableWithDefault: Codable {
    static var `default`: Self { get }
}
extension Set: CodableWithDefault {
    static var `default`: Set {
        return Set()
    }
}

这在 Swift 4 中运行良好,但从 4.1 开始,它抱怨:

'CodableWithDefault' requires that 'Element' conform to 'Encodable'

找不到任何方法来表达我想要一个Set的扩展,该扩展被限制为Element也实现Encodable

这在 Swift 4.1 中可能吗?

有了这个

extension Set: CodableWithDefault { ... }

您正在使Set符合Codable,而没有提供所需的方法。

在 Swift 4.1 中,只有当 Set 的泛型元素Codable时,才能避免实现所需的方法。

所以你需要限制你的扩展

extension Set: CodableWithDefault where Element : Codable {
    static var `default`: Set {
        return Set()
    }
}
你需要

Element Codable。若要使用扩展,需要执行

let set = Set<Yourtype>.defaults

请注意,有Yourtype .这就是编译器所说的Element的意思。现在,如果您使用此代码:

extension Set: CodableWithDefault where Element: Codable {
    static var defaults: Set {
        return Set()
    }
}

代码将编译,因为Element EncodableDecodable

相关内容

最新更新