上下文:我的团队正在启动一个新的中型Swift项目(大约20 MM),我正在考虑在RxSwift中开发它。我的一位经理怀疑,他曾经有过在反应性编程上调试的糟糕经验,因此他建议避免使用RxSwift,并使用经典的Swift。我试图找出RxSwift的缺点,但我没有发现任何关于可调试性问题的他们。
问题:,RxSwift在可调试性方面的实际技术限制是什么?
发布于 2020-02-12 11:50:01
自从2015年RxSwift首次问世以来,我就一直在使用它。这些年来,我把它放在了许多中小型项目中。我不认为这是困难的调试,但它是不同的调试。正如@AjinkaSharma在评论中提到的那样,跟踪堆栈跟踪是非常令人沮丧的体验,所以甚至不用费心。更好的做法是将.debug()运营商置于战略位置。另一个有用的工具是TimeLane,它将允许您在分析器中跟踪可观察到的数据。
更重要的是,如果您有一点点困难,让一个可观察到的链以您想要的方式工作,会编写一个单元测试。将一些逻辑封装到一个操作符中,然后使用RxTest为它编写一个测试是非常容易的,我不知道为什么更多的人除了习惯于单元测试在使用MVC时很痛苦之外,为什么不这么做。
根据我的经验,最难调试的部分是资源泄漏。除非在调试生成中包含TRACE_RESOURCES标志,否则即使检测它们也可能很困难。一旦您这样做,您可以将以下内容放入您的应用程序委托:
#if DEBUG
_ = Observable<Int>.interval(.seconds(1), scheduler: MainScheduler.instance)
.map { _ in RxSwift.Resources.total }
.distinctUntilChanged()
.subscribe(onNext: { print("♦️ Resource count \($0)") })
#endif这样,当您在屏幕之间返回和第四次访问时,您可以跟踪资源计数,以确保所有内容都被正确释放。
最后,您最终使用的体系结构是非常实用的,并且与大多数Swift开发人员所习惯的非常不同。如果做对了,您最终会得到更多的闭包和空闲函数,以及更少的协议和扩展,所以这也需要习惯。
加入我们的RxSwift松弛,在那里有一群知识渊博和活跃的参与者,他们将乐意回答快速问题或分享一些代码在任何时间。https://rxslack.herokuapp.com
https://stackoverflow.com/questions/60182325
复制相似问题