В следующем коде я хочу отправить некоторые значения на сервер, а также обновить номер значка на вкладках.Цепочка операций инициируется из markRead (), где я выбираю значения с сервера, и после ее завершения я обновляю номер значка на вкладках.
Мне кажется, что вся эта операция должна выполняться в фоновой очереди.Я не уверен, как и где я отправлю задачу в фоновом режиме, а затем вернусь в основную очередь, чтобы обновить номера значков.
Любая помощь?
class ViewController: UIViewController {
override func viewWillAppear(_ animated: Bool){
super.viewWillAppear(animated)
// I want to send following in the background queue
self.markRead(senderId: self.psychicId)
// Continue to do other stuff...
}
func markRead(senderId: Int) {
fetchMarkRead(jsonObject: jsonObject) { (result, error) in
guard error == nil else {
return
}
if (result?.success)! {
self.updateBadges { () -> () in
}
}
}
}
func markRead(jsonObject:[String:Any], _ completed: @escaping ((_ result: MarkAsReadRoot?, _ error: Error?) -> Void)) {
// construct url, josn etc...
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
completed( nil,error)
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
completed( nil,"Error in getting data from server" as? Error)
return
}
do {
let resultData = try JSONDecoder().decode(MarkAsReadRoot.self, from: data)
completed( resultData,nil)
} catch let jsonError {
completed(nil,jsonError)
return
}
}
task.resume()
}
func updateBadges(completed:@escaping (()->())){
// Get values from server
// Set badge number on Tabs
}
}