0

In following code I want to send some values to server and also update badge number on Tabs. A chain of operatios are initiated from markRead() where I fetch values from server and once it is completed I update badge number on Tabs.

I feel this entire operation should be executed in background queue. I'm not sure how and where I shall send the task in background and then come back to main queue to update badge numbers.

Any help?

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
    }

}
Davis
  • 105
  • 1
  • 12

0 Answers0