Swiftui @EnvironmentObject 在视图中更新
Posted
技术标签:
【中文标题】Swiftui @EnvironmentObject 在视图中更新【英文标题】:Swiftui @EnvironmentObject update in View 【发布时间】:2020-08-27 22:50:08 【问题描述】:我正在使用 @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:ObservableObject
@Published var beg:String = ""
@Published var end:String = ""
【问题讨论】:
【参考方案1】:这是因为EntryData
是一个类,如果您更改它的属性,它仍然是同一个对象。
这个@Published 只会在您重新分配data
属性时触发:
@Published var data: EntryData = EntryData()
一种可能的解决方案是使用简单的 struct 而不是 ObservableObject class:
struct EntryData
var beg: String = ""
var end: String = ""
当一个结构被改变时,它被复制,因此@Published 将发送objectWillChange
。
【讨论】:
以上是关于Swiftui @EnvironmentObject 在视图中更新的主要内容,如果未能解决你的问题,请参考以下文章
ObjectBinding 和 EnvironmentObject 有啥区别?
SwiftUI - SwiftUI 中是不是有等效的 popViewController?