Identity based object hash?


(Travis Griggs) #1

I have a class that I’d rather not have based off of NSObject, but I do want to have identity based equality. I’ve done that as follows:

class Foobar { }

extension Foobar:Equatable { }

func == (a:Foobar, b:Foobar) -> Bool {
  return a === b
}

What’s less clear to me is how to go about implementing an identity based hash

extension Foobar:Hashable {
  var hashValue:Int {
    // what magic should happen here?
  }
}


(Philippe Hausler) #2

ObjectIdentifier(self).hashValue is a decent approach; it hashes based upon the pointer address. That is how swift-corelibs-foundation does it for the swift implementation of NSObject: https://github.com/apple/swift-corelibs-foundation/blob/master/Foundation/NSObject.swift#L94

···

On Oct 5, 2016, at 9:53 AM, Travis Griggs via swift-users <swift-users@swift.org> wrote:

I have a class that I’d rather not have based off of NSObject, but I do want to have identity based equality. I’ve done that as follows:

class Foobar { }

extension Foobar:Equatable { }

func == (a:Foobar, b:Foobar) -> Bool {
  return a === b
}

What’s less clear to me is how to go about implementing an identity based hash

extension Foobar:Hashable {
  var hashValue:Int {
    // what magic should happen here?
  }
}
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users