Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- final class ViewModel: ObservableObject {
- @Published var state = State()
- func updateBoolean(code: String, value: Bool) {
- state.items = state.items.map {
- if $0.code == code {
- var newItem = $0
- newItem.isOn = value
- return newItem
- }
- return $0
- }
- }
- }
- struct State {
- var items: [Item] = []
- }
- struct Item {
- var isOn: Bool = false
- }
- struct MyView: View {
- @ObservedObject var viewModel: ViewModel
- var body: some View {
- Form {
- ForEach(viewModel.state.items, id: \.self) { item in
- BooleanSection(
- label: item.name) { isOn in
- self.viewModel.updateBoolean(
- code: item.code,
- value: isOn
- )
- print("Changed section boolean with -> \(isOn)")
- }
- }
- }
- }
- }
- struct BooleanSection: View {
- @State var isOn = false
- let label: String
- let onChange: (Bool) -> Void
- var binding: Binding<Bool> {
- return Binding(get: {
- return self.isOn
- }, set: { isOn in
- self.isOn = isOn
- self.onChange(isOn)
- })
- }
- var body: some View {
- Section {
- Toggle(label, isOn: binding)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement