在 Swift 中使用 @observable,我想使用计时器定期刷新 ObservedObject。我该怎么做呢?

Posted

技术标签:

【中文标题】在 Swift 中使用 @observable,我想使用计时器定期刷新 ObservedObject。我该怎么做呢?【英文标题】:Using @observable in Swift, I want to periodically refresh the ObservedObject using a timer. How do I do this? 【发布时间】: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()
        

【问题讨论】:

【参考方案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
        
    

【讨论】:

以上是关于在 Swift 中使用 @observable,我想使用计时器定期刷新 ObservedObject。我该怎么做呢?的主要内容,如果未能解决你的问题,请参考以下文章

rxswift observable 的简单 swift 变量

.observe firebase 方法 swift4 后代码未执行

Swift中实现Observable机制

如何在 Swift 上同步或使 Observable 等待?

订阅 Observable 时如何在 onNext 案例中获取状态码

swift RxSwift:Observables