У меня есть экран с 8 переключаемыми опциями в List (), когда вы переключаете элемент, он устанавливает свойство объекта на true или false правильно, поэтому я хотел уменьшить код на этой странице с 7 строк кода для каждого элемента до1 строка
ИЗ
Toggle(isOn: $viewRouter.flags.obj1) {
Text("Option1")
.foregroundColor(viewRouter.flags.obj1 ? COLOR_BLACK : COLOR_WHITE)
}.padding()
.background(viewRouter.flags.obj1 ? COLOR_LIGHT_GREEN : COLOR_LIGHT_RED)
.cornerRadius(30.0)
Toggle(isOn: $viewRouter.flags.obj2) {
Text("Option2")
.foregroundColor(viewRouter.flags.obj2 ? COLOR_BLACK : COLOR_WHITE)
}.padding()
.background(viewRouter.flags.obj2 ? COLOR_LIGHT_GREEN : COLOR_LIGHT_RED)
.cornerRadius(30.0)
TO
ToggleElement(isOn: $viewRouter.flags.obj1, text: "Object1")
ToggleElement(isOn: $viewRouter.flags.obj2, text: "Object2")
Используя следующий код
import SwiftUI
struct ToggleElement: View {
@Binding var isOn: Bool
var text: String = "test"
var body: some View {
Toggle(isOn: self.$isOn) {
Text(verbatim: self.text)
.foregroundColor(isOn ? COLOR_BLACK : COLOR_WHITE)
}
.padding()
.background(isOn ? COLOR_LIGHT_GREEN : COLOR_LIGHT_RED)
.cornerRadius(30.0)
}
}
struct ToggleElement_Previews: PreviewProvider {
@State static var previewIsOn: Bool = true
static var previews: some View {
ToggleElement(isOn: self.$previewIsOn, text: "buttonText")
}
}
Но цвет фона больше не меняется при переключении.
Объекты viewRouter.flags.obj1
и viewRouter.flags.obj2
меняют состояние для меня
Объект флагов
import Foundation
import SwiftUI
import Combine
class FlagObject: ObservableObject {
@Published var obj1:Bool = false
@Published var obj2:Bool = false
}