gpt4 book ai didi

swift - RxSwift - 链接 Observables 和 Singles

转载 作者:搜寻专家 更新时间:2023-11-01 06:25:55 24 4
gpt4 key购买 nike

我需要调用一系列函数来获取通知所需的所有信息。首先订阅打开 session ,然后 queryNotification监听所有传入的通知,一旦收到通知,需要调用 getNotificationAttrsnotificationId返回 queryNotification , 然后调用 getAppAttributesappIdentifier返回 getNotificationAttrs我需要 queryNotification 的组合结果, getNotificationAttrsgetAppAttributes .这些函数的外观如下:

func subscribeNotification() -> Single<Info>
func queryNotification() -> Observable<Notification>
func getNotificationAttrs(uid: UInt32, attributes: [Attribute]) -> Single<NotificationAttributes>
func getAppAttributes(appIdentifier: String, attributes: [AppAttribute]) -> Single<NotificationAppAttributes>

棘手的部分是 queryNotification返回 Observable 和 getNotificationAttrsgetAppAttributes返回单。我想将它们链接在一起的想法是:

subscribeNotification()
.subscribe(onSuccess: { info in
queryNotification()
.flatMap({ notification in
return getNotificationAttributes(uid: notification.uid, attributes: [.appIdentifier, .content])
})
.flatMap({ notifAttrs
return getAppAttributes(appIdentifier: notifAttrs.appIdentifier, attributes: [.displayName])
})
.subscribe {
// have all the result from last two calls
}
})

这可行吗?任何方向表示赞赏!谢谢!

最佳答案

最明显和恕我直言的正确解决方案是将您的 Single 提升为 Observable。另外,我不喜欢它所在的第一个 subscribe。您最终会得到一个缩进金字塔。

我正在关注您关于需要所有 queryNotification()getNotificationAttrs(did:attributes:)getAppAttributes(appIdentifier:attributes) 的值的评论:)...

let query = subscribeNotification()
.asObservable()
.flatMap { _ in queryNotification() }
.share(replay: 1)

let attributes = query
.flatMap { getNotificationAttrs(uid: $0.uid, attributes: [.appIdentifier, .content]) }
.share(replay: 1)

let appAttributes = attributes
.flatMap { getAppAttributes(appIdentifier: $0.appIdentifier, attributes: [.displayName]) }

Observable.zip(query, attributes, appAttributes)
.subscribe(onNext: { (query, attributes, appAttributes) in

})

以上内容将按照您概述的步骤进行,每次发出新通知时都会调用订阅。

另请注意,上面的代码读起来有点像同步代码(只是有一些额外的包装。)

关于swift - RxSwift - 链接 Observables 和 Singles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54834452/

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