首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SwiftUI中使用计时器时ObservedObject的奇怪行为

在SwiftUI中使用计时器时ObservedObject的奇怪行为
EN

Stack Overflow用户
提问于 2020-06-27 09:13:34
回答 1查看 35关注 0票数 0

在下面的程序中,为每个计时器事件调用Bar的初始化器。有人知道这个问题的原因吗?

这个问题在模拟器和真实设备iOS 13.5中都会发生。我在Xcode11.5上对此进行了测试。

代码语言:javascript
复制
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()
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-27 10:15:51

任何时候,作为ObservedObjectFoo发布更改时,都会导致“观察”它的视图重新呈现它们的body

ContentView中观察到Foo,因此Foo中的更改会使其重新计算其body

代码语言:javascript
复制
VStack {
    Text("\(foo.value)")
    FirstView()
}

这会调用FirstView(),而后者又会调用Bar()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62604814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档