#swift #swiftui
#swift #swiftui
Вопрос:
import SwiftUI
import Combine
struct ContentView: View {
var subtract = MinusToObject()
var body: some View {
VStack{
Text("The number is (MyObservedObject.shared.theObservedObjectToPass)")
Text("Minus")
.onTapGesture {
subtract.subtractIt()
}
NavigationView {
NavigationLink(destination: AnotherView()) {
Text("Push")
}.navigationBarTitle(Text("Master"))
}
}
}
}
class MyObservedObject: ObservableObject {
static let shared = MyObservedObject()
private init() { }
@Published var theObservedObjectToPass = 6
}
struct MinusToObject {
func subtractIt() {
MyObservedObject.shared.theObservedObjectToPass -= 1
}
}
Когда я нажимаю Minus
на вызов функции моего subtract
экземпляра, я знаю, что значение изменяется, потому что, если я перейду к другому представлению, я смогу увидеть новое значение, но текущее представление не обновляется.
Я думаю, что мне нужно поместить оболочку свойств вокруг var subtract = MinusToObject()
(я пробовал несколько довольно слепо), и я чувствую, что должен поместить $
где-нибудь для двусторонней привязки, но я не могу понять, где именно.
Ответ №1:
MinusToObject
Является избыточным. Вот способ (если хотите, сохранить общий доступ к MyObservedObject)…
struct ContentView: View {
@ObservedObject private var vm = MyObservedObject.shared
//@StateObject private var vm = MyObservedObject.shared // << SwiftUI 2.0
var body: some View {
VStack{
Text("The number is (vm.theObservedObjectToPass)")
Text("Minus")
.onTapGesture {
self.vm.theObservedObjectToPass -= 1
}
NavigationView {
NavigationLink(destination: AnotherView()) {
Text("Push")
}.navigationBarTitle(Text("Master"))
}
}
}
}
Комментарии:
1. Хотя это работает, я просто использую это в качестве примера, чтобы выяснить, как использовать метод экземпляра второй структуры в представлении, которое обновляет представление. Может быть, это тот случай, когда этого никогда не следует делать?