gpt4 book ai didi

ios - RxSwift - 订阅一个方法

转载 作者:行者123 更新时间:2023-11-28 08:16:56 25 4
gpt4 key购买 nike

RxSwift 有没有办法订阅一个返回完成 block 的方法?

例如,让我们有这个对象:

struct Service {

private var otherService = ...
private var initSucceeded = PublishSubject<Bool>()

var initSucceededObservale: Observable<Bool> {
return initSucceeded.asObservable()
}

func init() {
otherService.init {(success) in
self.initSucceeded.onNext( success)
}
}
}

并且在不同的地方有一种方法可以在服务初始化时得到通知:

service.initSucceededObservable.subscribe(onNext: {
[unowned self] (value) in
...
}).addDisposableTo(disposeBag)

service.init()

有没有更简单的解决方案?

最佳答案

我喜欢为这类事情使用变量。另外,我建议在这里使用类,因为您要跟踪独特的状态,而不仅仅是关心自己的值(value)。

class Service {
private let bag = DisposeBag()
public var otherService: Service?

private var isInitializedVariable = Variable<Bool>(false)

public var isInitialized: Observable<Bool> {
return isInitializedVariable.asObservable()
}

public init(andRelyOn service: Service? = nil) {
otherService = service

otherService?.isInitialized
.subscribe(onNext: { [unowned self] value in
self.isInitializedVariable.value = value
})
.addDisposableTo(bag)
}

public func initialize() {
isInitializedVariable.value = true
}

}

var otherService = Service()
var dependentService = Service(andRelyOn: otherService)

dependentService.isInitialized
.debug()
.subscribe({
print($0)
})

otherService.initialize() // "Initializes" the first service, causing the second to set it's variable to true.

关于ios - RxSwift - 订阅一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42353074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com