У меня есть этот класс в моем проекте:
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))
}