SwiftUI: запуск события при переключении переключателя - PullRequest
0 голосов
/ 23 сентября 2019

Мне нужно опубликовать уведомление при изменении состояния переключателя.Я не мог найти способ указать действие для переключения.Любая идея, как я могу это сделать?

var body: some View {
List {
            ForEach(items.indices) { index in
                Section(header: Text(self.items[index].label)) {
                    Toggle(isOn: self.$items[index].isOn) {
                        Text("Enabled")
                    }
                }
            }
        }
        .listStyle(GroupedListStyle())
    }
}

Но что тогда ??

1 Ответ

1 голос
/ 23 сентября 2019

Как правило, вы не хотите, чтобы ваш взгляд отвечал за выполнение кода, когда он изменяется, потому что ваш взгляд не является источником правды - он просто реагирует на изменения в вашем источнике правды.

В этом случае вам нужна модель представления, которая отвечает за поддержание состояния вашего представления.Когда это меняется, ваш взгляд реагирует.Затем вы можете заставить эту модель представления выполнять код при изменении одного из ее свойств (например, с помощью didSet ()).

struct ContentView: View {
    @ObservedObject var model = ListModel()

    var body: some View {
        List {
            ForEach(0..<model.sections.count, id: \.self) { index in
                Section(header: Text(self.model.sections[index].label as String)) {
                    Toggle(isOn: self.$model.sections[index].enabled) {
                        Text("Enabled")
                    }
                }
            }
        }
        .listStyle(GroupedListStyle())
    }
}

class ListModel: ObservableObject {
    @Published var sections: [ListSection] = [
        ListSection(label: "Section One"),
        ListSection(label: "Section Two"),
        ListSection(label: "Section Three")
    ]
}

struct ListSection {
    var label: String
    var enabled: Bool = false {
        didSet {
            // Here's where any code goes that needs to run when a switch is toggled
            print("\(label) is \(enabled ? "enabled" : "disabled")")
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...