Skip to content

Commit

Permalink
Merge branch 'improve/add-start-to-uispin'
Browse files Browse the repository at this point in the history
  • Loading branch information
twittemb committed Mar 10, 2020
2 parents 9b776c7 + bb0d103 commit 7a6ce9b
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 0 deletions.
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,13 @@ Observable
.disposed(by: self.disposeBag)
```

or a shortest version:

```swift
self.uiSpin.start()
// the underlying reactive stream will be disposed once uiSpin will be deinit
```

To send events in the loop, this is very straightforward, simply use the emit function:

```swift
Expand Down
5 changes: 5 additions & 0 deletions Sources/Spin.Combine/CombineSwiftUISpin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public final class CombineSwiftUISpin<State, Event>: CombineSpin<State, Event>,
@Published
public var state: State
private let events = PassthroughSubject<Event, Never>()
private var disposeBag = [AnyCancellable]()

public init(spin: CombineSpin<State, Event>) {
self.state = spin.initialState
Expand All @@ -30,4 +31,8 @@ public final class CombineSwiftUISpin<State, Event>: CombineSpin<State, Event>,
public func emit(_ event: Event) {
self.events.send(event)
}

public func start() {
AnyPublisher.start(spin: self).disposed(by: &self.disposeBag)
}
}
5 changes: 5 additions & 0 deletions Sources/Spin.Combine/CombineUISpin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import SwiftUI

@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
public final class CombineUISpin<State, Event>: CombineSpin<State, Event>, StateRenderer, EventEmitter {
private var disposeBag = [AnyCancellable]()
private let events = PassthroughSubject<Event, Never>()
private var externalRenderFunction: ((State) -> Void)?
public var state: State {
Expand Down Expand Up @@ -38,4 +39,8 @@ public final class CombineUISpin<State, Event>: CombineSpin<State, Event>, State
public func emit(_ event: Event) {
self.events.send(event)
}

public func start() {
AnyPublisher.start(spin: self).disposed(by: &self.disposeBag)
}
}
5 changes: 5 additions & 0 deletions Sources/Spin.ReactiveSwift/ReactiveSwiftUISpin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public final class ReactiveSwiftUISpin<State, Event>: ReactiveSpin<State, Event>
@Published
public var state: State
private let (eventsProducer, eventsObserver) = Signal<Event, Never>.pipe()
private let disposeBag = CompositeDisposable()

public init(spin: ReactiveSpin<State, Event>) {
self.state = spin.initialState
Expand All @@ -30,4 +31,8 @@ public final class ReactiveSwiftUISpin<State, Event>: ReactiveSpin<State, Event>
public func emit(_ event: Event) {
self.eventsObserver.send(value: event)
}

public func start() {
SignalProducer.start(spin: self).disposed(by: self.disposeBag)
}
}
5 changes: 5 additions & 0 deletions Sources/Spin.ReactiveSwift/ReactiveUISpin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import ReactiveSwift
import Spin_Swift

public final class ReactiveUISpin<State, Event>: ReactiveSpin<State, Event>, StateRenderer, EventEmitter {
private let disposeBag = CompositeDisposable()
private let (eventsProducer, eventsObserver) = Signal<Event, Never>.pipe()
private var externalRenderFunction: ((State) -> Void)?
public var state: State {
Expand Down Expand Up @@ -36,4 +37,8 @@ public final class ReactiveUISpin<State, Event>: ReactiveSpin<State, Event>, Sta
public func emit(_ event: Event) {
self.eventsObserver.send(value: event)
}

public func start() {
SignalProducer.start(spin: self).disposed(by: self.disposeBag)
}
}
5 changes: 5 additions & 0 deletions Sources/Spin.RxSwift/RxSwiftUISpin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public final class RxSwiftUISpin<State, Event>: RxSpin<State, Event>, StateRende
@Published
public var state: State
private let events = PublishRelay<Event>()
private let disposeBag = DisposeBag()

public init(spin: RxSpin<State, Event>) {
self.state = spin.initialState
Expand All @@ -31,4 +32,8 @@ public final class RxSwiftUISpin<State, Event>: RxSpin<State, Event>, StateRende
public func emit(_ event: Event) {
self.events.accept(event)
}

public func start() {
Observable.start(spin: self).disposed(by: self.disposeBag)
}
}
5 changes: 5 additions & 0 deletions Sources/Spin.RxSwift/RxUISpin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import RxSwift
import Spin_Swift

public final class RxUISpin<State, Event>: RxSpin<State, Event>, StateRenderer, EventEmitter {
private let disposeBag = DisposeBag()
private let events = PublishRelay<Event>()
private var externalRenderFunction: ((State) -> Void)?
public var state: State {
Expand Down Expand Up @@ -37,4 +38,8 @@ public final class RxUISpin<State, Event>: RxSpin<State, Event>, StateRenderer,
public func emit(_ event: Event) {
self.events.accept(event)
}

public func start() {
Observable.start(spin: self).disposed(by: self.disposeBag)
}
}

0 comments on commit 7a6ce9b

Please sign in to comment.