传统上,SwiftUI 应用程序会自动更新其视图以响应任何状态更改。当 @State propertyWrapper 检测到任何更新时,就会发生这种情况。我很好奇,是否可以手动重绘 SwiftUI 视图,而不是依赖@State 数据绑定技术?
您可以使用一个
ObservableObject
对象作为模型,然后调用objectWillChange.send()
触发刷新
struct MyView : View {
@ObservedObject var model: Model
var body: some View { .. }
}
class Model: ObservableObject {
func reloadView() {
objectWillChange.send()
}
}
也许这让 Sorin 的伟大答案更容易理解。
1 — 把它放在你的 Extensions.swift 中(或者任何地方,真的)
class ReloadViewHelper: ObservableObject {
func reloadView() {
objectWillChange.send()
}
}
2 — 然后在没有更新的类中,添加这个变量。
@ObservedObject var reloadViewHelper = ReloadViewHelper()
3 — 然后当您希望更新整个视图时,只需调用:
reloadViewHelper.reloadView()
或者像这样
Button(action: { reloadViewHelper.reloadView() } ) {
Text("Update View")
}