gpt4 book ai didi

ios - 在 SwiftUI 中切换更改后更新数组

转载 作者:行者123 更新时间:2023-12-01 16:06:06 25 4
gpt4 key购买 nike

我在 SwiftUI 中有一个 ScooterReservationView 类:

...
@State var extensionIDs: [Int] = []

var body: some View {
...
List(scooterExtensionVM.extensions, id: \.self) { scooterExtension in
ScooterExtensionRow(_extension: scooterExtension, extensionIDs: self.$extensionIDs)
}
...

scooterExtensionVM.extensions 数组从 API 请求中获取其值,扩展是基于后端 API 的完全动态的。然后我有 ScooterExtensionRow 结构:

struct ScooterExtensionRow: View {

@EnvironmentObject var appState: AppState
@Binding var extensionIDs: [Int]

var scooterExtension: ScooterExtension
@State var isOn: Bool = true

init(_extension: ScooterExtension, extensionIDs: Binding<[Int]>) {
self.scooterExtension = _extension
self._extensionIDs = extensionIDs
}

var body: some View {
HStack {
Toggle(isOn: self.$isOn) {
Text(scooterExtension.name)
}
.padding()
}
}

我的目标是在任何 ScooterExtensionRow View 中的 Toggle 发生变化时更新 extensionIDs 数组。如果有任何 Toggle 打开,我需要将 ScooterExtension 的扩展 ID 添加到该数组,如果它关闭,我需要从数组中删除该 ID。这需要我稍后进行 API 请求。 (我需要收集所有已启用/切换的扩展程序的 ID)

问题是:我在文档中看不到 Toggle 的任何类型的回调操作,我可以在其中将值附加到数组或从数组中删除值,但也许回调不是最好的方法伟大的 SwiftUI 世界。

谁能帮助实现这一目标的最佳方法是什么?

最佳答案

假设 ScooterExtension 有一个属性 id,可以按如下方式完成:

Toggle(isOn: Binding<Bool>(get:{ self.isOn }, 
set: {
self.isOn = $0
if $0 {
self.extensionIDs.append(self.scooterExtension.id)
} else {
self.extensionIDs = self.extensionIDs.filter { $0 != self.scooterExtension.id }
}
})) {
Text(scooterExtension.name)
}

关于ios - 在 SwiftUI 中切换更改后更新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60460464/

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