SwiftUI: использование атрибута Published для отображения листа
Добрый вечер!
Я работаю над простым проектом, где у меня есть модель представления, в которой опубликовано логическое значение. Я хотел бы показать лист, когда это значение установлено. Однако функция листа используетBinding
тип, тем временем у меня естьPublished
тип.
Можно ли как-то бороться с таким случаем? В случае, если я попытаюсь справиться с этим с помощью некоторых обратных вызовов иState
переменная в объекте представления, это сделает архитектуру более грязной, поэтому я бы хотел этого избежать.
final class ContentViewModel: ObservableObject {
@Published private(set) var isVisable = false
func toggleVisability() {
isVisable.toggle()
}
}
struct ContentView: View {
@StateObject var model = ContentViewModel()
var body: some View {
VStack {
Button("Show") {
model.toggleVisability()
}
.sheet(isPresented: model.$isVisable, // ERROR: Cannot convert value of type 'Published<Bool>.Publisher' to expected argument type 'Binding<Bool>'
onDismiss: { model.toggleVisability() }) {
Text("Placeholder")
}
}
}
}
1 ответ
Опубликованная переменная должна быть общедоступной для установки, а привязка должна быть предоставлена для самой модели (наблюдаемого объекта).
final class ContentViewModel: ObservableObject {
@Published var isVisable = false // CHANGE HERE
func toggleVisability() {
isVisable.toggle()
}
}
struct ContentView: View {
@StateObject var model = ContentViewModel()
var body: some View {
VStack {
Button("Show") {
model.toggleVisability()
}
.sheet(isPresented: $model.isVisable, // CHANGE HERE
onDismiss: { model.toggleVisability() }) {
Text("Placeholder")
}
}
}
}
Большое спасибо JoakimDanielson и lorem ipsum.