Skip to content

Instantly share code, notes, and snippets.

@nanoxd
Last active September 29, 2019 11:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nanoxd/8a25ef13a29f4d06424f618681199843 to your computer and use it in GitHub Desktop.
Save nanoxd/8a25ef13a29f4d06424f618681199843 to your computer and use it in GitHub Desktop.
import RxRelay
import RxSwift
@propertyWrapper
public struct BehaviorRelayWrapping<T> {
private let subject: BehaviorRelay<T>
// MARK: PropertyWrapper
public let wrappedValue: Observable<T>
public init(value: T) {
subject = BehaviorRelay(value: value)
wrappedValue = subject.asObservable()
}
// MARK: BehaviorRelay
public func accept(_ event: T) {
subject.accept(event)
}
}
@propertyWrapper
public struct PublishRelayWrapping<T> {
private let subject: PublishRelay<T>
// MARK: PropertyWrapper
public let wrappedValue: Observable<T>
public init() {
subject = PublishRelay<T>()
wrappedValue = subject.asObservable()
}
// MARK: PublishRelay
public func accept(_ event: T) {
subject.accept(event)
}
}
import Foundation
import RxSwift
import RxRelay
@propertyWrapper
public struct BehaviorSubjectWrapping<T>: ObserverType {
private let subject: BehaviorSubject<T>
// MARK: PropertyWrapper
public let wrappedValue: Observable<T>
public init(value: T) {
subject = BehaviorSubject(value: value)
wrappedValue = subject.asObservable()
}
// MARK: ObserverType
public func on(_ event: Event<T>) {
subject.on(event)
}
}
@propertyWrapper
public struct PublishSubjectWrapping<T>: ObserverType {
private let subject: PublishSubject<T>
// MARK: PropertyWrapper
public let wrappedValue: Observable<T>
public init() {
subject = PublishSubject<T>()
wrappedValue = subject.asObservable()
}
// MARK: ObserverType
public func on(_ event: Event<T>) {
subject.on(event)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment