【发布时间】:2020-04-19 17:54:33
【问题描述】:
我有一个 ObservableObject 应该保存我的应用程序状态:
final class Store: ObservableObject {
@Published var fetchInterval = 30
}
现在,该对象被注入到我的层次结构的根部,然后在树下的某个组件中,我试图访问它并将其绑定到 TextField,即:
struct ConfigurationView: View {
@EnvironmnetObject var store: Store
var body: some View {
TextField("Fetch interval", $store.fetchInterval, formatter: NumberFormatter())
Text("\(store.fetchInterval)"
}
}
- 即使绑定了变量(使用
$),属性也没有更新,初始值显示正确,但是当我更改它时,文本字段更改但绑定没有传播 - 与第一个问题相关的是,一旦值更改,我将如何接收事件,我尝试了以下 sn-p,但没有任何内容被触发(我假设是因为文本字段未正确绑定...
$fetchInterval
.debounce(for: 0.8, scheduler: RunLoop.main)
.removeDuplicates()
.sink { interval in
print("sink from my code \(interval)")
}
非常感谢任何帮助。
编辑:我刚刚发现对于文本变量,绑定可以开箱即用,例如:
// on store
@Published var testString = "ropo"
// on component
TextField("Ropo", text: $store.testString)
Text("\(store.testString)")
只有 int 字段才不会正确更新变量
编辑 2:
好的,我刚刚发现仅更改字段是不够的,必须按Enter 才能传播更改,这不是我想要的,我希望每次更改字段时都传播更改...
【问题讨论】:
标签: ios swift macos swiftui combine