ObservationLite
ObservationLite 是一个非常轻量级的事件发布和事件观察的 Swift 库,功能也非常简单。当您不想引入 RxSwift 或其他异步编程的库时,只想实现简单的事件发布和订阅的话,ObservationLite 是一个不错的选择。
要求
-
iOS 9.0+ | macOS 10.10+ | tvOS 9.0+ | watchOS 3.0+
-
Xcode 11
集成
CocoaPods (iOS 8+, OS X 10.9+)
您可以使用 CocoaPods 将 SwiftyJSON
添加到您的 Podfile
中来安装它
platform :ios, '9.0'
use_frameworks!
target 'MyApp' do
pod 'ObservationLite', '~> 1.0'
end
事件发布
事件发布有两个类:PublishSubject 和 BehaviorSubject。它们的区别:
- PublishSubject:不记录最近发布的事件
- BehaviorSubject:会记录最近发布的一个事件
例如:
let batteryLevelEventPublisher = BehaviorSubject(event: 0.0)
let chargingEventPublisher = PublishSubject<Bool>()
batteryLevelEventPublisher.publish(0.8)
chargingEventPublisher.publish(true)
事件监听
var chargingEvent: Observable<Bool> {
return chargingEventPublisher.asObservable()
}
var batteryLevelEvent: Observable<Double> {
return batteryLevelEventPublisher.asObservable()
}
batteryLevelEvent.subscribe { (batteryLevel) in
// Handle battery level event
}.dispose(by: disposeBag)
chargingEvent.subscribe { (isCharging) in
// Handle new event
}.dispose(by: disposeBag)
Observer 的释放
当你订阅的时候,Observer 实际上就是您提供的闭包。那么何时释放它呢?这里引入了 RxSwift 中的 DisposeBag。
订阅时,我们会将 Clousure 交给 disposeBag 管理起来。一旦 disposeBag 被释放,它管理的所有 disposes 将会触发销毁动作。