ios - 使用 ScopedDisposable 和 take(during : . ..) 有什么区别?

标签 ios swift reactive-cocoa reactive-swift

我的 View Controller 有一些信号,我想在 viewDidLoad() 中观察来自该信号的值。我需要在 View Controller 失效时处理该信号:

override func viewDidLoad() {
    super.viewDidLoad()
    let composite = CompositeDisposable()
    defer {
        disposable = ScopedDisposable(composite)
    }
    composite += someSignal.take(during: self.reactive.lifetime).observeValues { ... }
}

是否有必要像我在代码中那样将 viewModel.alertSignal.take(during: self.reactive.lifetime).observeValues ... 的结果添加到 ScopedDisposable 对象:composite + = ...?或者只调用 take(during: self.reactive.lifetime) 就足够了吗?

最佳答案

假设 disposable 是你的 ViewController 的一个属性,它和 take(during:) 做同样的事情所以你可以使用任何你喜欢的,但你不需要同时使用!

override func viewDidLoad() {
    super.viewDidLoad()
    let composite = CompositeDisposable()
    defer {
        disposable = ScopedDisposable(composite)
    }
    composite += someSignal.observeValues { ... }
}

override func viewDidLoad() {
    super.viewDidLoad()
    someSignal.take(during: self.reactive.lifetime).observeValues { ... }
}

我个人更喜欢使用 take(during:) 因为它的代码更少。

关于ios - 使用 ScopedDisposable 和 take(during : . ..) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48025317/

相关文章:

swift - 使用 Alamofire 检查 url : responseData don't work

ios - 符合通用协议(protocol)的结构类型,其关联类型也是协议(protocol)

iphone - iOS 中的水平 UIScrollView 和数百个缩略图?

ios - Xcode 5 自动布局并使 UIView 的宽度等于高度

iOS:图片幻灯片放映

ios - 导致错误的 UIAlertView 按钮操作

ios - UIWeb View 崩溃 Swift

ios - 使用 ReactiveCocoa 将 UIKit 与 View 模型绑定(bind) 3/4

ios - 如何在通知中使用 Reactive Cocoa

ios - 信号观察者能否访问 ReactiveCocoa 信号的最后发射值?