gpt4 book ai didi

ios - RxSwift 在关闭时正确处理订阅

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

我正在围绕 Firebase 身份验证函数编写包装器以返回 Observable 并添加额外的 profileIncomplete 状态。它基本上首先检查用户是否已登录,如果是,则检查用户的个人资料是否完整。以下是我的代码,我想知道是否可以在 Observable.create 中订阅一个可观察对象,如果可以,在这种情况下如何正确处理一次性对象?在闭包内创建一个 DisposeBag

enum State {
case loggedIn
case profileIncomplete
case notLoggedIn
}

func listenToAuthState() -> Observable<State> {
return Observable.create { observable in
let authStateHandle = Auth.auth().addStateDidChangeListener() { [weak self] (_, user) in
guard let user = user else {
observable.onNext(.notLoggedIn)
return
}
let disposable = self?.listenToProfileCompleted(uid: user.uid).subscribe(onNext: { (completed) in
if completed {
observable.onNext(.loggedIn)
observable.onCompleted()
} else {
observable.onNext(.profileIncomplete)
}
})
// How to dispose the disposable???
}
return Disposables.create {
Auth.auth().removeStateDidChangeListener(authStateHandle) }
}
}

func listenToProfileCompleted(uid: String) -> Observable<Bool> { ... }

最佳答案

我认为在 Observable.create 内订阅(或在不同的订阅 block 内)是一种代码气味。

您似乎有两个不同的问题。 stateChangedprofileCompleted .

我会把它们分成两种不同的方法,有 listenToAuthState只负责反射(reflect)addStateDidChangeListener的结果, 并有一个单独的 listenToProfileCompleted .

这将使您有一个单独的“就绪”(或者您想要的称呼),可以将两者压缩。或者以其他方式使用 flatMap,如果在您收听配置文件完成之前必须更改身份验证状态。

关于ios - RxSwift 在关闭时正确处理订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51567825/

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