gpt4 book ai didi

ios - Swift/iOS - 在 View Controller 之间共享模型状态

转载 作者:行者123 更新时间:2023-11-30 11:04:31 25 4
gpt4 key购买 nike

我有一个关于在 View Controller 之间共享模型状态的问题。

让我们举个例子:Twitter 应用程序。在时间线提要中,您会看到状态列表,这些状态是从 API 加载的,序列化为模型。在提及源中,您还有一个状态列表。它们也从 API 加载,序列化为模型,但作为不同的实例。如果用户点击提及提要上的心形按钮,它也应该在时间线提要中显示为喜欢的推文。但这意味着共享代表相同状态更新的两个不同模型实例的状态。

解决这种不一致状态的方法是使用状态“缓存”。我将其作为静态属性放入 Status 模型中,如下所示:

static var cache: Array<Status> = Array<Status>()

并使用辅助方法始终为每个帖子使用单个实例,无论它们是从哪个 View Controller 加载/修改的。

这是反模式吗?有更好的方法吗?

最佳答案

首先重新表述一下。

  • 获取 API A 返回 arrayA[ X, Y, Z]
  • 获取 API B 返回 arrayB[M, Y, F]
  • View Controller A 显示数组 A
  • View Controller B 显示数组 B
  • 对象不会被持久化

用户在 View Controller A 中修改 Y,但 View Controller B 不显示更新。

  • 选项 1:将所有对象放入一个数组中并添加一种机制来了解它应该显示在 A 和 B View Controller 中
  • 选项 2:当任一数组发生更新时,如果满足以下条件,则更新其他数组:元素存在
  • 选项 3:获取 API A 和获取 API B 处理程序将结果存储在 arrayC 或dictionaryC,还维护arrayA和arrayB。然而A和B没有不再保存对象的实例,而不是对对象的引用arrayC 或dictionaryC。这实际上只是一个实现选项 1。我得到了一个字典 C,其中 key 是存储在 value 中的对象的 uuid,数组 A 和 B 仅存储键。

当然还有其他选项,例如发送通知,以便其他 View Controller 知道刷新数据。

不过,我认为您不应该走上保持不同实例同步的道路。

关于ios - Swift/iOS - 在 View Controller 之间共享模型状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52877196/

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