Swift 5.0 Hashable

1,202 阅读1分钟

今天更新了Swift 5.0 原本遵守 Hashable 的地方出现了警告

具体使用如下

swift 5.0 写法

struct CacheEntry: Hashable {
    let text: String
    let width: CGFloat
    let insets: UIEdgeInsets
    let index: Int
    func hash(into hasher: inout Hasher) {
        hasher.combine(text)
        hasher.combine(width)
        hasher.combine(insets.top)
        hasher.combine(insets.left)
        hasher.combine(insets.bottom)
        hasher.combine(insets.right)
        // hasher.combine(index)
    }
    static func == (lhs: CacheEntry, rhs: CacheEntry) -> Bool {
        var lhsHasher = Hasher()
        var rhsHasher = Hasher()
        lhs.hash(into: &lhsHasher)
        rhs.hash(into: &rhsHasher)
        return lhsHasher.finalize() == rhsHasher.finalize()
    }
}
let entry1 = CacheEntry(text: "text", width: 100, insets: UIEdgeInsets.zero, index: 10)
let entry2 = CacheEntry(text: "text", width: 100, insets: UIEdgeInsets.zero, index: 11)
let flag = entry1 == entry2
print(flag)
/// 控制台输出 true
/// 如果去掉 `hash(into hasher: inout Hasher) `最后注释的hasher.combine(index)则输出 false