![](/img/trans.png)
[英]dispatchQueue.main.asyncAfter(deadline:) crash when UIViewController dismissed swift
[英]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()
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.