dataTask как возвратить массив?


#1

Добрый день, нужна ваша помощь!
Дело в том, что у меня есть задача, и как известно, она выполняется асинхронно, сначала возвращает значение, а после приходит результат задачи, но мне нужно возвратить именно результат, как дождаться выполнения задачи?
Дело в том, что данный код должен вызывается с другого класса и передавать результат.
Помогите, кто чем может.

class func getCountPrinatOrders()->[[String:String]]{
    var arrCount = [[String:String]]()
          
        if defaults.string(forKey: defaultsKeys.login) != nil {
        let url = URL(string: "https://portal.vaillant-vn.com/apis/apiAppIos.php?action=getCountOrdersForBadge")
                   let defaults = UserDefaults.standard
                   let login = defaults.string(forKey: defaultsKeys.login)
                   let password = defaults.string(forKey: defaultsKeys.password)
                   let config = URLSessionConfiguration.default
                   let userPasswordString = "\(login!):\(password!)"
                   let userPasswordData = userPasswordString.data(using: String.Encoding.utf8)
                   let base64EncodedCredential = userPasswordData!.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
                   let authString = "Basic \(base64EncodedCredential)"
                   config.httpAdditionalHeaders = ["Authorization" : authString]
                   let session = URLSession(configuration: config)
                    let task = session.dataTask(with:  url!, completionHandler:  { (data, response, error) in
                        guard let data = data else { return }

                   do{
                       let jsonResult = try JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary
                                            
                    DispatchQueue.main.sync {
                        let jsonLoans = jsonResult?["badge"] as! [AnyObject]
                        
                                  for jsonLoan in jsonLoans {
                                    arrCount.append(["jornal" : "\(jsonLoan["jornal"] as! String)"])
                                    arrCount.append(["issued" : "\(jsonLoan["issued"] as! String)"])          
                           }
                    }
                    
                   }catch{
                       print(error)
                   
                   }
                   
                    
                       })
            
               
                     task.resume()
              
        }
 return arrCount
    }