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

plu*_*plu 0 generics set swift codable swift4.1

protocol CodableWithDefault: Codable {
    static var `default`: Self { get }
}

extension Set: CodableWithDefault {
    static var `default`: Set {
        return Set()
    }
}
Run Code Online (Sandbox Code Playgroud)

在Swift 4中,这工作正常,但是从4.1开始,它抱怨:

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

我找不到任何表示要扩展的方法Set,该扩展Element也必须实现Encodable

Swift 4.1完全可行吗?

Luc*_*tti 5

有了这个

extension Set: CodableWithDefault { ... }
Run Code Online (Sandbox Code Playgroud)

您正在Set遵守Codable但未提供必需的方法。

在Swift 4.1中,仅当Set的通用元素为时,才可以避免实施必需的方法Codable

所以你需要限制扩展名

extension Set: CodableWithDefault where Element : Codable {
    static var `default`: Set {
        return Set()
    }
}
Run Code Online (Sandbox Code Playgroud)