Files
OrderScheduling/Pods/RxCocoa/RxCocoa/Traits/Signal/Signal.swift
DDIsFriend f0e8a1709d initial
2023-08-18 17:28:57 +08:00

46 lines
1.6 KiB
Swift

//
// Signal.swift
// RxCocoa
//
// Created by Krunoslav Zaher on 9/26/16.
// Copyright © 2016 Krunoslav Zaher. All rights reserved.
//
import RxSwift
/**
Trait that represents observable sequence with following properties:
- it never fails
- it delivers events on `MainScheduler.instance`
- `share(scope: .whileConnected)` sharing strategy
Additional explanation:
- all observers share sequence computation resources
- there is no replaying of sequence elements on new observer subscription
- computation of elements is reference counted with respect to the number of observers
- if there are no subscribers, it will release sequence computation resources
In case trait that models state propagation is required, please check `Driver`.
`Signal<Element>` can be considered a builder pattern for observable sequences that model imperative events part of the application.
To find out more about units and how to use them, please visit `Documentation/Traits.md`.
*/
public typealias Signal<Element> = SharedSequence<SignalSharingStrategy, Element>
public struct SignalSharingStrategy: SharingStrategyProtocol {
public static var scheduler: SchedulerType { SharingScheduler.make() }
public static func share<Element>(_ source: Observable<Element>) -> Observable<Element> {
source.share(scope: .whileConnected)
}
}
extension SharedSequenceConvertibleType where SharingStrategy == SignalSharingStrategy {
/// Adds `asPublisher` to `SharingSequence` with `PublishSharingStrategy`.
public func asSignal() -> Signal<Element> {
self.asSharedSequence()
}
}