[英]SwiftUI EnvironmentObject out of sync with View
舉一個簡單的例子來說明我在做什么,我有一個環境對象:
class ViewModel: ObservableObject {
@Published var x: CGFloat = 0
@Published var y: CGFloat = 0
}
正在觀察這些數字以調整其偏移量的視圖:
struct PrimaryView: View {
@EnvironmentObject var model: ViewModel
// inside the view struct
SomeView()
.offset(x: model.x, y: model.y)
}
另一個負責更改這些數字的視圖:
struct ChangeView: View {
@EnvironmentObject var model: ViewModel
// inside the view
Button(action: {
switch directionCondition {
case .up:
model.y += 10
case .down:
model.y -= 10
case .left:
model.x += 10
case .right:
model.x -= 10
}) // end button here for brevity
當我的應用程序加載時,有時它可以完美運行,而有時按下按鈕時根本不會觸發,然后當您再次點擊它時它會觸發。
這是我迄今為止嘗試過的。 我將更改放在視圖模型中,只調用導致ChangeView
更改的ChangeView
。 我使用DispatchQueue
異步調度這些更改。 我從按鈕中刪除了 switch 語句並手動進行了這些更改。 最后,我將這些突變放回視圖中,看看這是否對性能產生了影響。
這些都不起作用,所以我開始覺得這可能是蘋果方面的一個錯誤,但我也可能做一些完全不正確的事情。 另外,環境對象已正確附加到App.Swift
的應用程序根目錄。
我從EnvironmentObject
切換到ObservedObject
並將后續代碼移動到我需要它的每個視圖中,現在一切正常。 我的猜測是環境對象在初始加載時可能會不同步。 至於為什么或如何我不確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.