@State var не обновляется при изменении значения за пределами представления

#xcode #swiftui

Вопрос:

Мне нужно объявить массив флажков с помощью «@State», если я хочу использовать его внутри представления с помощью $checkBox, и он работает нормально, но когда я хочу обновить переключатели (1 или более элементов массива) в функции вне представления, массив не обновляется. Я попытался объявить его с помощью @Binding и @Published, но безуспешно. Я видел много подобных вопросов и ответов, но я не нашел решения для своего случая. Это мой код:

 struct CheckboxStyle: ToggleStyle {
    func makeBody(configuration: Self.Configuration) -> some View {
        return HStack {
            Image(systemName: configuration.isOn ? "checkmark.circle.fill" : "circle")
                .resizable()
                .frame(width: 24, height: 24)
                .foregroundColor(configuration.isOn ? .green : .gray)
                .onTapGesture { configuration.isOn.toggle() }
            configuration.label
        }
    }
}

struct ContentView: View {
    @State var checkBox = Array(repeating: false, count: 14)
    let checkBoxName: [LocalizedStringKey] = ["checkPressure", "checkVisibility", "checkCloudCover", "checkAirTemp", "checkWaterTemp", "checkWindDir", "checkWindSpeed", "checkWindGust", "checkCurrentDir", "checkCurrentSpeed", "checkSwellDir", "checkWaveHeight", "checkWavePeriod", "checkTideHeight"]
    
    var body: some View {
        ScrollView {
            VStack(alignment: .leading) {
                Group {
                    ForEach(0..<7) { t in
                        Toggle(isOn: $checkBox[t], label: {
                            Text(checkBoxName[t]).font(.footnote).fontWeight(.light)
                        }).toggleStyle(CheckboxStyle()).padding(5)
                    }
                }
                Group {
                    ForEach(7..<14) { t in
                        Toggle(isOn: $checkBox[t], label: {
                            Text(checkBoxName[t]).font(.footnote).fontWeight(.light)
                        }).toggleStyle(CheckboxStyle()).padding(5)
                    }
                }
            }
        }
    }
}

 

Thx за помощью

Комментарии:

1. Я не вижу ничего «вне поля зрения» в примере-можете ли вы проиллюстрировать, что вы пытаетесь сделать?

2. Я просто хочу установить переключатели в функции, которая находится внутри представления содержимого, и кажется, что использование массива Bool не работает, мне придется определить переключатели в представлении тела