今天更新了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
复制代码