gpt4 book ai didi

swift - 在 RxSwift 中将一种类型的列表映射到另一种类型,但保留现有列表

转载 作者:行者123 更新时间:2023-11-28 07:44:56 25 4
gpt4 key购买 nike

我时不时地遇到这个问题,我一直在问自己是否以错误的方式使用了 RxSwift(或完全响应式(Reactive)的方式)。

挑战在于将值类型转换为可在 UI 上表示的内容。

通常在较低级别上,我使用简单类型存储数据,但我需要在 UI 级别上有更多状态。举个例子,假设我有以下类型的列表:

struct Person {
let firstName: String
let lastName: String
}

但是,在 UI 上,我将从这些项目创建的 View 模型绑定(bind)到 UITableView 实例中。我可以通过简单地从一种类型映射到另一种类型来实现这一点:

let displayedPersons = listOfPersons.map { PersonViewModel($0) }

这将使所有项目在我试图避免的每次更新时重新创建。我正在使用 MVVM 并希望保留 View 模型实例,因为它们是 transient 的。每次更新时重新加载 TableView 也会弄乱动画。

我在想自定义绑定(bind)是否可以在这里提供帮助,使用缓存映射将一个可观察对象绑定(bind)到另一个对象。我最终采用的另一种解决方案是简单地循环可观察对象,这样在映射时,我会得到我将用作缓存的先前值。

实际上,我只需要映射新项目并保留现有项目。有什么想法可以实现吗?

最佳答案

在我非常有偏见的观点中,MVVM 适用于元素需要动态且彼此独立地更新的非常复杂的 UI。对于所有其他情况,我使用自己的库 https://github.com/maxvol/RaspSwift (注意:它不仅适用于 UI,也适用于 UI)。核心思想源于 MVI,归结为对每个变异事件都有一个新的状态快照。因此,在您的情况下,状态将包含缓存的 PersonViewModel 的集合,该集合将在接收到变异事件时部分更新。整个事情将通过 RxDataSources 库绑定(bind)到 UITableView。

关于swift - 在 RxSwift 中将一种类型的列表映射到另一种类型,但保留现有列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51375543/

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