как реализовать func hash (в хэшер: inout Hasher)?

У меня есть этот класс в моем проекте:

public protocol Disposable {
    func dispose()
    var isDisposed: Bool { get }
}

public final class AnyCancellable: Disposable {

    private let lock = NSRecursiveLock(name: "any_cancellable")
    private var handler: (() -> ())?

    public var isDisposed: Bool {
        lock.lock(); defer { lock.unlock() }
        return handler == nil
    }


    public init(_ handler: @escaping () -> ()) {
        self.handler = handler
    }

    deinit {
        dispose()
    }

    public func dispose() {
        lock.lock()
        guard let handler = handler else {
            lock.unlock()
            return
        }
        self.handler = nil
        lock.unlock()
        handler()
    }

    public func cancel() {
        dispose()
    }
}

можно ли сделать AnyCancellable соответствующим Hashable?

extension AnyCancellable: Hashable {
  public static func == (lhs: AnyCancellable, rhs: AnyCancellable) -> Bool {
    lhs === rhs
  }

  public func hash(into hasher: inout Hasher) {
   ?????
  }
}

это правильная реализация?

public func hash(into hasher: inout Hasher) {
    hasher.combine(ObjectIdentifier(self))
  }

person Bobj-C    schedule 21.11.2019    source источник
comment
Если равенство основано на идентичности объекта, то это правильно, сравните, например. stackoverflow.com/a/30345908/1187415.   -  person Martin R    schedule 21.11.2019