SwiftUI 是否从订阅者中删除了@Published 属性 的重复项?
Does SwiftUI removeDuplicates from a subscriber to an @Published property?
如果我有一个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
如果我有一个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