繁体   English   中英

更好的替代 DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) 用于数据刷新

[英]Better alternative to DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) for data refresh

我正在寻找一个更好的替代DispatchQueue.main.asyncAfter(deadline: .now() + 0.5来刷新我的数据。

我的数据是动态的,并且会根据用户操作而变化,重要的是用户看到的数据始终是最新的。

我正在使用 Firebase 实时数据库,我想知道是否可以随时更改我的服务文件以重新获取数据。 这是我的服务文件:

class Service {
    static let shared = Service()
    let BASE_URL = "https://firebaseurl.com/jsondata.json"
    let calendar = Calendar.current
    
    func fetchClient(completion: @escaping ([Calls]) -> ()) {

        guard let url = URL(string: BASE_URL) else { return }

        URLSession.shared.dataTask(with: url) { (data, response, error) in

            // handle error
            if let error = error {
                print("Failed to fetch data with error: ", error)
                return
            }

            guard let data = data else {return}

            do {
                let myDecoder = JSONDecoder()
                myDecoder.dateDecodingStrategy = .secondsSince1970
                let calls = try myDecoder.decode([Calls?].self, from: data).filter({
                    self.calendar.isDateInToday($0?.dateTime ?? Date(timeIntervalSinceReferenceDate: -123456789.0)) 
                })
                
                completion(calls.filter{$0?.callmade != true}.compactMap{ $0 })
            } catch let error {
                print("Failed to create JSON with error: ", error)
            }
        }.resume()
    }
}

目前在我的主要 Controller 我正在使用:

func fetchClient() {
    Service.shared.fetchClient { (client) in
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
            self.client = client
            self.collectionView.reloadData()
            self.fetchClient()
            
        }
    }
}

您可以使用实时数据库来观察数据的变化。

https://firebase.google.com/docs/database/ios/read-and-write#listen_for_value_events

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM