【问题标题】:Swift 4.1 - Set extension requires Element to conform to EncodableSwift 4.1 - Set 扩展需要 Element 符合 Encodable
【发布时间】:2018-04-10 13:05:25
【问题描述】:
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 中完全可能吗?

【问题讨论】:

    标签: swift generics set codable swift4.1


    【解决方案1】:

    有了这个

    extension Set: CodableWithDefault { ... }
    

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

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

    所以你需要限制你的扩展

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

    【讨论】:

      【解决方案2】:

      你需要做ElementCodable。要使用你的扩展,你需要做

      let set = Set<Yourtype>.defaults
      

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

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

      代码将编译,因为Element EncodableDecodable

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多