gpt4 book ai didi

ios - 使用RxSwift时如何显示和从ViewController中的API错误中恢复

转载 作者:行者123 更新时间:2023-12-03 07:58:55 25 4
gpt4 key购买 nike

我试图弄清楚在处理RxSwift流时如何在ViewController层重试API调用。我知道我可以将错误包装在Element中,也可以返回流Error。在这两种情况下,都不清楚用户如何自行决定如何“重试”该操作(例如,在发出警报后)。

如果我包装了错误,如何/应该“向下”通讯回API层以尝试重试?如果我不包装错误,则有两个问题:
1)如何使retry取决于用户对警报的响应?和
2)如何/应该“重新初始化”流?

我唯一能想到的是传回带有错误的“重试主题”,并让 View Controller 通过在关联的可观察对象上发出某些内容(即为主题分配值)来指示重试请求,这将术语与API流相关联。然而,这似乎令人费解。

更笼统地说,我很感谢任何有关使用流/可观察对象处理应用程序错误的有用文献的引用。我觉得我对RxSwift对象和运算符以及如何处理“快乐路径”情况有很好的了解,但是我不清楚在连续运行的应用程序中如何稳健地处理错误。

最佳答案

我的解决方案是将它们包装为Result<AnyObject,ErrorType>类型

例如,用户登录方案

// where API.login() takes the response data and try to map to JSON
// then try to map into Result<JSON,ErrorType>
let loginStream: Result<JSON,ErrorType> = loginTaps.flatMap { API.login() }
.shareReplay()

let loginResponse = loginStream.filter { $0.value != nil }.map { $0.value }
let loginError = loginStream.filter { $0.error != nil }.map { $0.error }

流永远不会被终止,因此无需重新订阅它们。

关于ios - 使用RxSwift时如何显示和从ViewController中的API错误中恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39553432/

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