Я выполнял код, который выглядит как
final class Foo: Identifiable {}
let id1 = Foo().id
print("id1", id1.hashValue)
let id2 = Foo().id
print("id2", id2.hashValue)
print("id1 == id2", id1 == id2)
let foo1 = Foo()
let foo2 = Foo()
print("id3", foo1.id.hashValue)
print("id4", foo2.id.hashValue)
Я понял, что часто - не всегда - первые два идентификатора будут одинаковыми (тот же ha sh, тот же указатель), что последние два всегда будет отличаться, и что второе значение ha sh и третье также часто - не всегда - будут одинаковыми.
Например, это, скорее всего, напечатает
// id1, id2 and id3 are the same
id1 372028973742592862
id2 372028973742592862
id1 == id2 true
id3 372028973742592862
id4 -6512610764240591489
а иногда
// id1 and id2 are the same
id1 682965245911293614
id2 682965245911293614
id1 == id2 true
id3 -1068884789025324935
id4 6999154593386001644
и реже
// all ids are different
id1 9219089083903263322
id2 6156776739104921767
id1 == id2 false
id3 -8383648492598359180
id4 483187449076408614
Что происходит?