在下面的程序中,为每个计时器事件调用Bar的初始化器。有人知道这个问题的原因吗?
这个问题在模拟器和真实设备iOS 13.5中都会发生。我在Xcode11.5上对此进行了测试。

import SwiftUI
import Combine
class Foo: ObservableObject {
@Published var value: Int
init() {
print("init")
self.value = 10
Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (_) in
self.value += 1
}
}
}
class Bar: ObservableObject {
@Published var value: Int
init() {
print("Bar")
self.value = 100
}
}
struct FirstView: View {
@EnvironmentObject var foo: Foo
@ObservedObject var bar = Bar()
var body: some View {
VStack {
Text("\(foo.value)")
Text("\(bar.value)")
}
}
}
struct ContentView: View {
@EnvironmentObject var foo: Foo
var body: some View {
VStack {
Text("\(foo.value)")
FirstView()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}发布于 2020-06-27 10:15:51
任何时候,作为ObservedObject的Foo发布更改时,都会导致“观察”它的视图重新呈现它们的body
在ContentView中观察到Foo,因此Foo中的更改会使其重新计算其body
VStack {
Text("\(foo.value)")
FirstView()
}这会调用FirstView(),而后者又会调用Bar()。
https://stackoverflow.com/questions/62604814
复制相似问题