func choose(_ card: MemoryGame<String>.Card)
{
objectWillChange.send()
model.choose(card)
}
Run Code Online (Sandbox Code Playgroud)
我这里有一些函数,它位于 ViewModel 中,用于我正在制作的东西,我只是想知道 objectWillChange 到底是如何工作的?就像当它说对象时它到底指的是什么?既然我把它放在 ViewModel 中,是不是说 ViewModel 会改变?但话又说回来,我把它专门放入这个选择函数中,那么这有什么相关性呢?我基本上希望它发布模型中的某些更改(选择了一张卡),它似乎正在做,但我不完全理解我之前所说的内容。
objectWillChange是协议上定义的属性,您可以在ObservableObject 的文档ObservableObject中看到。
编译器合成该属性的默认实现,每当@Published对象的任何属性发生更改时,该实现都会发出一个值。
当您将对象存储为(或或) 视图上时,SwiftUI 使用objectWillChange Publisher来更新。View@ObservedObject@StateObject@EnvironmentObject
当您需要手动更新视图时,您还可以通过objectWillChange使用其方法手动发送更新。send()
请参阅下面的简化示例:
class ViewModel: ObservableObject {
@Published var published: Int = 0
var nonPublished: Int = 0
}
struct MyView: View {
@ObservedObject var viewModel: ViewModel
...
}
let viewModel = ViewModel()
let view = MyView(viewModel: viewModel)
viewModel.published = 1 // viewModel.objectWillChange emits a value here and view will be updated
viewModel.nonPublished = 2 // viewModel.objectWillChange does not emit a value here and view will not be updated
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3635 次 |
| 最近记录: |