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

标签 swift generics set codable swift4.1

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

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

这在 Swift 4 中运行良好,但从 4.1 开始它会提示:

“CodableWithDefault”要求“Element”符合“Encodable”

我找不到任何方式来表达我想要限制 ElementSet 的扩展也实现 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()
    }
}

关于Swift 4.1 - Set 扩展要求 Element 符合 Encodable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49754493/

相关文章:

ios - UITabBar 尺寸在 iPhone X 上增加

generics - Typescript 中的通用工厂参数

python - 在 Python 中计算 n 元重叠矩阵的最快方法

ios - 在 Swift 中设置一个 UICollectionView 删除按钮

swift - 如何更改 UserDefaults 中的值的类型?

haskell - 这个 GHC.Generic 函数签名错误消息是什么意思?

c# - Scala 中的泛型 : implementing an interface/trait twice?

algorithm - 不相交的字符串集 - 最小化问题

Prolog - 从事实列表中获取集合的最大值(使用失败谓词)

swift - Xamarin 中的 CGMutablePath