有一個陣列Views,每當currentPosition變數改變時,視圖必須改變。然而它并沒有改變。
我有一個全域ObservableObject類,它有一個 s 陣列View和一個currentPosition值。我的目標是根據currentPosition變數更改視圖。
class AXGlobalValues: ObservableObject {
@Published var tabs: [AXTabItem] = [
.init(webView: AXWebView()),
.init(webView: AXWebView())
]
@Published var currentPosition: Int = 0
}
在 SwiftUI 視圖上,我寫了global.tabs[global.currentPosition].webView,我期望 webView 根據global.currentPosition值進行更改。然而并沒有改變。
我嘗試做的是添加一個onChange(of:),但由于 SwiftUI 是一種宣告性語言,我無法更新視圖。
struct AXTabView: View {
@EnvironmentObject private var global: AXGlobalValues
var body: some View {
Text("\(global.currentPosition)")
global.tabs[global.currentPosition].webView
.onChange(of: global.currentPosition) { newValue in
// Not allowed in SwiftUI :(
global.tabs[global.currentPosition].webView
}
}
}
有什么辦法可以根據currentPosition變數更新視圖嗎?
提前致謝!
uj5u.com熱心網友回復:
ObservableObject是 Combine 框架的一部分,旨在持久化(或同步)資料模型,它不是存盤 SwiftUI View 結構的正確位置。
此外,對于currentPosition我們通常使用@State var簡單值或自定義結構的視圖資料,當我們想要對一些相關的變數進行分組或具有額外的邏輯時。更改body時重新計算。@State
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/534868.html
標籤:迅速代码苹果系统迅捷
