gpt4 book ai didi

ios - 如果另一个模型中存在值,则更新模型的属性

转载 作者:行者123 更新时间:2023-11-28 07:20:10 32 4
gpt4 key购买 nike

我有 2 个“发射器”阵列。启动器的基本建模如下

struct Launcher {
let id: UUID
let title: String
}

我的 API 返回这些启动器 [Launcher] 的数组,我调用 2 个端点以获得 2 个不同的结果。

  1. userApi 返回用户选择的启动器列表
  2. companyApi 返回可用启动器列表

我想向用户展示一个屏幕,以便他们可以选择加入或退出启动器。为此,我必须能够在 UIButton 上设置初始状态,以便它反射(reflect)他们是否已经拥有它。

我在考虑给模型添加一个属性

struct Launcher {
let id: UUID
let title: String
var selected: Bool = false
}

然后在获取 companyApi 结果时,更新我的模型上的属性以指示用户是否使用它。我只会在当前用户的上下文中获取,因此无需担心多个用户。

如果用户模型中存在 companyLaunchersuserLaunchers 并更新公司模型中的 selected Prop ,我该如何区分?

我是这样想的

company.forEach { cl in
cl.selected = (user.first { $0.id == cl.id } != nil)
}

但这不起作用,因为 Cannot assign to property: 'cl' is a 'let' constant 也不是很直观

最佳答案

因为 Launcher 是一个 struct,所以您的循环每次都将它的一个副本分配给 cl。这个副本是一个 let,所以你不能改变它,即使它不是一个 let,你也不会更新 company 数组中的值。

您可以通过遍历 companyindices 来解决这个问题,然后通过该索引更新 company 数组中的值:

company.indices.forEach { idx in
company[idx].selected = (user.first { $0.id == company[idx].id } != nil)
}

也就是说,在 user 数组中为 company 中的每个 Launcher 搜索每个 Launcher 并不是很方便高效的。或许您应该将 company 设为由 UUID 键入的 Dictionary(类型 [UUID : Launcher])。

然后您可以通过遍历 user 数组来更新 company:

for ul in user {
company[ul.id]?.selected = true
}

关于ios - 如果另一个模型中存在值,则更新模型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58467845/

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