SwiftUI是否删除@Published属性的订阅者中的重复项



如果我有一个类似ObservableObject的。。。

class Foo: ObservableObject {
@Published var value: Int = 1
func update() {
value = 1
}
}

然后一个像。。。

struct BarView: View {
@ObservedObject var foo: Foo
var body: some View {
Text("(foo.value)")
.onAppear { foo.update() }
}
}

这是否会导致视图不断刷新?还是SwiftUI在其创建的订阅服务器中做了类似于removeDuplicates的事情?

我想是后者,但我一直在努力寻找有关这方面的任何文件。

onAppear在视图首次出现在屏幕上时被调用。刷新视图时不会再次调用它,因为已发布的属性已经更新,所以您在这里的代码只会更改一次值,然后更新视图。

如果您在视图主体中添加了更新对象的内容,那么可能会触发某种异常,我现在想尝试一下。

好的,这个:

class Huh: ObservableObject {
@Published var value = 1
func update() {
value += 1
}
}
struct TestView: View {
@StateObject var huh = Huh()

var body: some View {
huh.update()
return VStack {
Text("(huh.value)")
}.onAppear(perform: {
huh.update()
})
}
}

只是将SwiftUI放入一个无限循环中。如果我不是刚买了一台新Mac,它现在可能已经崩溃了:D

最新更新