I am using swift 3.0 and have created a function that returns an Array of Integers. The arrays of Integers are very specific and they are gotten from a database therefore the HTTP call is asynchronous . This is a function because I use it in 3 different controllers so it makes sense to write it once . My problem is that the Async code is returned after the return statement at the bottom therefore it is returning nil . I have tried the example here Waiting until the task finishes however it is not working mainly because I need to return the value . This is my code
func ColorSwitch(label: [UILabel]) -> [Int] {
    for (index, _) in label.enumerated() {
       label[index].isHidden = true
    }
    // I need the value of this variable in the return
    // statement after the async is done
    var placeArea_id = [Int]()
    let urll:URL = URL(string:ConnectionString+"url")!
    let sessionn = URLSession.shared
    var requestt = URLRequest(url: urll)
    requestt.httpMethod = "POST"
    let group = DispatchGroup()
    group.enter()
    let parameterr = "http parameters"
    requestt.httpBody = parameterr.data(using: String.Encoding.utf8)
    let task =   sessionn.dataTask(with:requestt, completionHandler: {(data, response, error) in
        if error != nil {
            print("check check error")
        } else {
            do {
                let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:Any]
                DispatchQueue.main.async {
                    if let Profiles = parsedData?["Results"] as? [AnyObject] {
                        if placeArea_id.count >= 0 {
                            placeArea_id = [Int]()   
                        }
                        for Profiles in Profiles {
                            if let pictureS = Profiles["id"] as? Int {
                                placeArea_id.append(pictureS)
                            }
                        }
                    }
                    group.leave()
                }
            } catch let error as NSError {
                print(error)
            }
        }
    })
    task.resume()
    group.notify(queue: .main) {
   // This is getting the value however can't return it here since it 
   // expects type Void
    print(placeArea_id)
    }
   // this is nil
    return placeArea_id
}
I already checked and the values are returning inside the async code now just need to return it any suggestions would be great .
 
     
     
     
    