如果我有一个使用Observable
如下宏的存储库类:
@Observable class TaskRepository {
var number: Int = 0
var isCompleted: Bool = false
}
我想要访问我的视图模型中的存储库:这里也使用,@Observable
因为我希望 SwiftUI 在更新某些内容时重新绘制视图……
// with @State
@Observable class CardViewModel{
@State private var taskRepository = TaskRepository()
var title: String = "Name"
// view model do some processing...
}
我应该用它@State
来初始化存储库吗?因为我也可以这样做:
// without @State
@Observable class CardViewModel{
private var taskRepository = TaskRepository()
var title: String = "Name"
// view model do some processing...
}
有人能帮助我了解我什么时候应该考虑@State
吗?我的理解是,通过使用@State
它,我可以将 TaskRepository 注入到环境中,这很适合在视图之间共享数据。
你不应该
@State
在@Observable
课堂上使用。的目的
@State
是允许 SwiftUI 管理 SwiftUI 控制的结构中的属性存储,有效地赋予它们“引用类型的行为”。请注意,即使不是,您也可以@State
在 a 中将 s 设置为新值。View.body
body
mutating
这只适用于某些类型。s
App
、Scene
s、ViewModifier
s 和 view style 等ButtonStyle
是一些可以适用的类型,这是我能想到的。SwiftUI 旨在@State
在实现这些协议的类型中查找 s 并为它们分配存储空间。@Observable
类已经引用了类型,因此它们不需要@State
,并且 SwiftUI 并非设计用于@State
。但即使在此之前,@Observable
宏也不是设计用于处理类主体中的任何属性包装器,并且它会扩展为非常无效的内容。您的代码甚至无法编译。最后,与将对象注入环境
@State
无关@Observable
。您可以使用将对象注入环境environment(_:)
,无论它是 a@State
还是其他。