【发布时间】:2020-06-13 01:46:14
【问题描述】:
我在 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 视图中的 Toggle 发生更改时更新 extensionIDs 数组。如果任何一个 Toggle 被打开,我需要将 ScooterExtension 的扩展 ID 添加到该数组,如果它关闭,我需要从数组中删除 id。这需要我稍后提出 API 请求。 (我需要收集所有启用/切换扩展的 ID)
问题是:我在文档中看不到任何类型的 Toggle 回调操作,我可以在其中将值附加到数组/从数组中删除,但也许回调不是最好的方法伟大的 SwiftUI 世界。
谁能帮助实现这一目标的最佳方法是什么?
【问题讨论】:
-
extensionIDs是否可以折叠成AppState以便在那里存储(和发布)更新? -
我可以将 extensionIDs 放入 AppState,但我认为它不能解决我原来的问题,因为我无法在切换开关后向该数组添加/删除元素