0
我想用我的類來創建一些屬性的一個唯一的標識符:添加hashValues一起使用位異或運算符或簡單地添加在一起
class Foo {
var name = "John"
var array = ["string1", "string2"]
var check: Bool { return name.isEmpty }
var xor: Int { return name.hashValue^check.hashValue }
var add: Int { return name.hashValue + check.hashValue }
}
let test = Foo()
print(test.xor) // prints 4799450059756749538
print(test.add) // prints 4799450059756749538
沒有問題的工作。
但是在閱讀一些教程時,一些站點使用運算符^
將散列值「添加」在一起。
我的問題是,如果我使用運算符^
來計算identifier
,它是否有任何(負面)影響?因爲當我計算數組的哈希值,我不能使用運營商+
,我被迫使用^
,而不是(除非我使用Int32
/Int64
代替):
var identifier: Int { return name.hashValue^array.map { $0.hashValue }.reduce(0) { $0^$1 }^check.hashValue }
而且我已經看到人們在處理散列值時使用按位左移和右移操作符。這有什麼特別的理由嗎?