Ваш .onTapGesture
сверх Toggle
не вызывается, потому что последний не позволяет его (обработка самому нажатием, и даже .simultaneousGesture
не поможет)
Здесь возможен подход к достижению цели (протестировано с Xcode 11.2 / iOS 13.2)
...
// define proxy binding, wrapping direct work with UserDefaults
private let overdueFirst = Binding<Bool>(
get: { UserDefaults.standard.bool(forKey: "Overdue First") },
set: { UserDefaults.standard.set($0, forKey: "Overdue First") })
var body: some View {
VStack {
HStack {
Toggle(isOn: overdueFirst) { // use proxy binding directly
Text("Overdue cards first")
}
}
...
Однако я бы порекомендовал связать этот переключатель непосредственно с соответствующим свойством UserSettings
и обрабатывать syn c с UserDefaults
там (например, на didSet
).