swift - 如何获得更新另一个视图中的变量的结构函数在更改时也刷新该视图?
问题描述
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()
(我已经尝试了几个相当盲目的),我觉得我应该在$
某个地方放置一个双向绑定,但我不知道在哪里。
解决方案
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"))
}
}
}
}
推荐阅读
- python - 我的 csv 文件中的文本被读取为原始字符串。它包含“it\'s”而不是它。我该如何清洁这个?
- django - Django:在模型级别而不是列级别应用验证器
- cypress - 赛普拉斯测试通过了单个表单输入字段,但忽略了以下输入字段
- python - 从嵌入列中的列表中提取元素
- python - 我的 python 气泵代码有什么问题?
- ios - 如何在 Swift 中向自定义 DateComponent 添加分钟
- python - 将列表中的唯一元素附加到新列表
- wordpress - AMP 上的 Google 表单是否需要 HTTPS?
- extreact - Sencha extJs/exreact 6/7 Tree 获取选中记录
- python - 排序算法不会产生正确的输出