Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Token {
- public typealias DisposeAction = () -> Void
- private let action: DisposeAction
- private var isDisposed: Bool = false
- public init(action: @escaping DisposeAction) { self.action = action }
- private func innerDispose() {
- guard !isDisposed else { return }
- isDisposed = true
- action()
- }
- public func dispose() { innerDispose() }
- deinit { innerDispose() }
- }
- public class Pipe<Element> {
- public let signal = Signal<Element>()
- public func dispatch(_ value: Element) {
- signal.dispatch(value)
- }
- public init() {}
- }
- public class Signal<Element> {
- public typealias Callback = (Element) -> Void
- private var callbacks = [:] as [Int: Callback]
- private var nextID = 0
- fileprivate func dispatch(_ value: Element) {
- callbacks.forEach { $1(value) }
- }
- public func onUpdate(_ callback: @escaping Callback) -> Token {
- let id = nextID
- nextID += 1
- callbacks[id] = callback
- return Token { [weak self] in self?.callbacks[id] = nil }
- }
- }
Add Comment
Please, Sign In to add comment