视图中的Swiftui@EnvironmentObject更新

视图中的Swiftui@EnvironmentObject更新,swiftui,Swiftui,我使用的是@EnvironmentObject(即ViewModel),我有一个demoData()函数 当我按下它时,数据会发生变化,但我的视图不会更新 如何获取要在视图中更改的数据 多谢各位 查看信息: import Combine import SwiftUI struct MainView: View { @EnvironmentObject var entry:EntryViewModel var body: some View { Tex

我使用的是@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") }

    }
}
视图模型:

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
是一个类,如果更改其属性,它仍然是同一个对象

此@Published仅在您重新分配
数据
属性时才会触发:

@Published var data: EntryData = EntryData()

一种可能的解决方案是使用简单的结构而不是ObserveObject类:

当结构发生更改时,它会被复制,因此@Published将发送
objectWillChange

@Published var data: EntryData = EntryData()
struct EntryData {
    var beg: String = ""
    var end: String = ""
}