我需要向同一个 API 发出三个不同的请求。这些调用都不依赖于其他调用。我目前的请求嵌套如下:
API.getPopularMovies() { responseObject, error in
if let results = responseObject {
self.popularMovies = results
self.API.getNowPlayingMovies() { responseObject, error in
if let results = responseObject {
self.nowPlayingMovies = results
self.API.getUpcomingMovies() { responseObject, error in
if let results = responseObject {
self.upcomingMovies = results
self.movies = [self.popularMovies, self.nowPlayingMovies, self.upcomingMovies]
self.tableView.reloadData()
}
}
}
}
}
}
}
我觉得这可能不是一个好方法,并且正在寻找一些指导以找到更好的方法来解决这个问题。目前,生成的数组似乎正确填充了我的表视图,但我忍不住觉得这种嵌套方法是不正确的。
如果你的操作都不是依赖的,那你为什么要嵌套它们呢?我发现在第三个完成之前您不会重新加载 UITableView - 如果这是一项硬要求,那么他们are依赖。
当它们相互依赖时,这种嵌套有时被称为“末日金字塔”。清理它的一个好方法是将嵌套代码包装为 monad,这将允许以下操作:
- 代码可以整齐地链接起来,而不是嵌套,从而提高可读性。
- 您可以使用单个而不是重复的错误处理
- 任何最终/始终的任务都可以清晰地表达。
这称为承诺。这里有一个优秀的关于它们如何工作的教程。 http://khanlou.com/2016/08/promises-in-swift/
还有一些很棒的图书馆。承诺工具包 https://github.com/mxcl/PromiseKit是一种流行的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)