我有一个异步函数,目前看起来像这样
func startLoginFlow() {
IdentityProvider.shared.login { success, error in
// on success a user has completed authentication
if success {
delegate?.userIsAuthenticated()
}
// on error something wen't wrong
....
}
}
从本质上讲,成功时将调用一个委托方法,结果将发生某些操作。
我想将其包装为可观察的。我没有重构IdentityProvider.shared.login
的选项。
我基本上只需要发出可观察到的信号,这样我就可以使用onNext
订阅并采取其他行动。
我目前正在做以下事情
func startLoginFlow() -> Observable<Void> {
return Observable.create { [weak self] observable in
IdentityProvider.shared.login { success, error in
if success {
observable.onNext(Void())
}
}
return Disposables.create()
}
}
这是最好的方法吗?我不确定是否应该使用Observable.of
并订阅IdentityProvider.shared.login
答案 0 :(得分:1)
这也是我创建可观察对象的方式。我唯一要注意的是添加errors
,以便在出现错误时可以处理您的可观察对象,而completion
也可以表明您的可观察对象已完成。
func startLoginFlow() -> Observable<Void> {
return Observable.create { [weak self] observable in
IdentityProvider.shared.login { success, error in
if success {
observable.onNext(())
observable.onCompleted()
} else {
observable.onError(error)
}
}
return Disposables.create()
}
}
在这种情况下, Observable.of
的工作也是如此。它只是发出completed
方法。如果您尝试使用两种方法创建Observable<String>
,则可以自己进行测试。
我发现在进行网络请求时,Observable.create
在这里很有用,而且您可以控制希望观测对象出错,失败或完成的方式。
这里的人也提供了一个很好的例子:
Rxswift What difference between Observable.of and Observable<String>.create