我感觉这是一个已经有人问过的问题,但我找不到很多相关内容。
当我们使用变量更新UI时,我们何时/为什么要在视图中使用
这是在我试图掌握MVVM架构的背景下。我通常了解它们之间的区别,只是对于两者都可以轻松完成同样任务的情况下,不知道哪种方法更好。
下面是两个例子,它们实现了相同的功能,但一个使用
当我们使用变量更新UI时,我们何时/为什么要在视图中使用
@State
,而不是在ViewModel中使用@Published
?这是在我试图掌握MVVM架构的背景下。我通常了解它们之间的区别,只是对于两者都可以轻松完成同样任务的情况下,不知道哪种方法更好。
下面是两个例子,它们实现了相同的功能,但一个使用
@State
,另一个使用@Published
和ViewModel。哪种方法更好(用于更新UI的目的)?
@State
示例:struct MyView: View {
@State var backgroundIsRed = false
var body: some View {
ZStack {
if backgroundIsRed {
Color.red
} else {
Color.green
}
}
.onTapGesture { backgroundIsRed.toggle() }
}
}
@Published
的示例:
class ViewModel: ObservableObject {
@Published var backgroundIsRed = false
}
struct MyView: View {
@StateObject var viewModel = ViewModel()
var body: some View {
ZStack {
if viewModel.backgroundIsRed {
Color.red
} else {
Color.green
}
}
.onTapGesture { viewModel.backgroundIsRed.toggle() }
}
}
SwiftUI
是以MVVM
方法为设计思路的。尽管如此,许多开发人员决定跳过ViewModel
直接从模型到视图。这取决于你的观点 - 这篇文章讨论了如何实现 MVVM,而这篇帖子则持反对态度。 - user20384561