我有一个在SwiftUI中的ScooterReservationView类:
...
@State var extensionIDs: [Int] = []
var body: some View {
...
List(scooterExtensionVM.extensions, id: \.self) { scooterExtension in
ScooterExtensionRow(_extension: scooterExtension, extensionIDs: self.$extensionIDs)
}
...
电动滑板车扩展VM的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世界中实现它的最佳方式。
有谁能帮忙找出实现这一目标的最佳方法吗?