public final class Cancellable { public init(cancel: @escaping () -> Void) { self.onCancel = cancel } deinit { cancel() } public func cancel() { guard isCancelled == false else { return } isCancelled = true onCancel() } private var isCancelled = false private let onCancel: () -> Void }