我正在使用@EnvironmentObject(即ViewModel),并且具有demoData()函数。
当我按下它时,数据确实发生了变化,但是我的视图没有更新。
如何在视图中更改数据?
谢谢。
视图信息:
import Combine
import SwiftUI
struct MainView: View {
@EnvironmentObject var entry:EntryViewModel
var body: some View {
TextField("Beg Value", text: self.$entry.data.beg)
TextField("Beg Value", text: self.$entry.data.end)
Button(action: { self.entry.demoData() }) { Text("Demo Data") }
}
}
ViewModel:
class EntryViewModel: ObservableObject {
@Published var data:EntryData = EntryData()
func demoData() {
var x = Int.random(in: 100000..<120000)
x = Int((Double(x)/100).rounded()*100)
data.beg = x.withCommas()
x = Int.random(in: 100000..<120000)
x = Int((Double(x)/100).rounded()*100)
data.end = x.withCommas()
}
型号:
EntryData:ObservableObject {
@Published var beg:String = ""
@Published var end:String = ""
}
答案 0 :(得分:1)
这是因为EntryData
是一个类,如果更改其属性,它仍将是同一对象。
仅当您重新分配data
属性时,此@Published才会触发:
@Published var data: EntryData = EntryData()
一种可能的解决方案是使用简单的 struct 而不是ObservableObject class :
struct EntryData {
var beg: String = ""
var end: String = ""
}
更改结构后,将其复制,因此@Published将发送objectWillChange
。