Observable 2.2.0

Observable 2.2.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2020年12月
SPM支持 SPM

Robert-Hein Hooijmans 维护。



Observable

Observable 是在 Swift 中观察值的最容易的方式。

如何

创建 Observable 和 MutableObservable

使用 MutableObservable,您可以创建和观察事件。使用 Observable,您可以观察事件,以避免对我们内部 API 产生副作用。

class SomeViewModel {
    /// Public property, that can be read / observed by external classes (e.g. view controller), but not changed.
    var position: Observable<CGPoint> = {
        return positionSubject
    }
    // Or use the helper method Observable.asObservable()
    // lazy var position = positionSubject.asObservable()

    /// Private property, that can be changed / observed inside this view model.
    private let positionSubject = MutableObservable(CGPoint.zero)
}

创建带有自定义 onDispose 功能的观察器

在某些情况下,Observables 在激活时需要资源,并且在它们被销毁时必须清理。为了处理这类情况,您可以将一个可选块传递给 Observable 初始化器,以便在 Observable 被销毁时执行。

url.startAccessingSecurityScopedResource()
let observable = Observable([URL]()) {
    url.stopAccessingSecurityScopedResource()
}

作为@MutableObservable的模型属性

现在将绑定/映射属性标记为可观察的,并导出公共可观察对象

//Private Observer
@MutableObservable var text: String = "Test"

//add observer

_text.observe { (newValue, oldValue) in
    print(newValue)
}.add(to: &disposable)
        
//Public Observer

var textObserve: ImmutableObservable<String> {
    return _text
}

添加观察者

position.observe { p in
    // handle new position
}

添加观察者并指定DispatchQueue

position.observe(DispatchQueue.main) { p in
// handle new position
}

更改值

position.wrappedValue = p

停止监听新值

position.observe {
    // This will stop all observers added to `disposal`
    self.disposal.dispose()
}.add(to: &disposal)

内存管理

对于单个观察者,您可以将返回的Disposable存储在一个变量中

disposable = position.observe { p in

对于多个观察者,您可以向Disposal变量添加可处理项

position.observe { }.add(to: &disposal)

并且在您的观察器内部引用self时,始终弱化self

position.observe { [weak self] position in

安装

CocoaPods

Observable 可通过 CocoaPods 使用。要安装它,只需将以下行添加到您的 Podfile 中

pod 'Observable'

Swift 包管理器

Observable 可通过 Swift Package Manager 得到。 Swift Package Manager (SwiftPM) 是一个用于自动化 Swift 代码分布的工具。它集成到 Swift 编译器中,Xcode 11 之后,SwiftPM 已原生集成到 Xcode 中。

dependencies: [
    .package(url: "https://github.com/roberthein/Observable", from: "VERSION")
]

迁移

1.x.y 至 2.0.0

  • Observable 现在变为 MutableObservable
  • ImmutableObservable 现在变为 Observable
  • Observable.asImmutableObservable() 现在变为 Observable.asObservable()
  • Observable.value 现在变为 Observable.wrappedValue

建议或反馈?

请随意创建一个拉取请求、打开一个问题或在我的 Twitter 上找到我 (https://twitter.com/roberthein)