【问题标题】:Using @observable in Swift, I want to periodically refresh the ObservedObject using a timer. How do I do this?在 Swift 中使用 @observable,我想使用计时器定期刷新 ObservedObject。我该怎么做呢?
【发布时间】:2020-06-28 09:32:12
【问题描述】:

我正在编写一个从网站提取数据并使用 SwiftUI 显示的应用程序。

我的主视图有一个@ObservedObject,它的类型为DataStore(),并在视图中使用:

struct ContentView: View {
    @ObservedObject var store = DataStore()
    
    var body: some View {
        List(store.zones) { zone in
...

数据模型定义为:

class DataStore: ObservableObject {
    @Published var zones: [SonosZone] = []
        
    init() {
        getZones()
    }
    
    func getZones() {
        Api().getZones { (zones) in
            self.zones = zones
        }
    }
}

我想每 30 秒拨打一次getZones()。我该怎么做?

我猜我在某处使用了这样的代码,但我不知道该放在哪里,也不知道如何调用闭包中的函数:

        _ = Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { _ in
            getZones()
        }

【问题讨论】:

    标签: swift swiftui combine observedobject


    【解决方案1】:

    我想通了。

    class DataStore: ObservableObject {
        @Published var zones: [SonosZone] = []
            
        init() {
            getZones()
            _ = Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { _ in
                self.getZones()
            }
        }
        
        
        func getZones() {
            Api().getZones { (zones) in
                self.zones = zones
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多