在视图中更新Swiftui @EnvironmentObject

时间:2020-08-27 22:50:08

标签: swiftui

我正在使用@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 = ""

}

1 个答案:

答案 0 :(得分:1)

这是因为EntryData是一个类,如果更改其属性,它仍将是同一对象。

仅当您重新分配data属性时,此@Published才会触发:

@Published var data: EntryData = EntryData()

一种可能的解决方案是使用简单的 struct 而不是ObservableObject class

struct EntryData {
    var beg: String = ""
    var end: String = ""
}

更改结构后,将其复制,因此@Published将发送objectWillChange