My function runsQueries runs two different queries. And i need these two queries to be completed before I can call updateResults function. 
What is the best approach to get it done? I've tried a few different things but nothing actually worked so far.
    func runsQueries(){
    var foundRecords = [CKRecords]()
    let notified = dispatch_semaphore_create(0)
    let group = dispatch_group_create()
    let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
    dispatch_group_async(group, queue) {
        // query 1
        let predicate1 = NSPredicate(format: "userID = %@", user1ID)
        let cloudKitQuery1 = CKQuery(recordType: "Messages", predicate: predicate1)
        publicDatabase.performQuery(cloudKitQuery1, inZoneWithID: nil) { (messageRecords: [CKRecord]?, error: NSError?) in
            if error != nil
            {
                    print("-> cloudKitLoadMessage - userID1 error \(error)")
            }
            else
            {
                     print("-> cloudKitLoadMessage - user1Done - message") 
                     foundRecords.apend(messageRecords[0])
            }
        }
        // query 2
        let predicate2 = NSPredicate(format: "userID = %@", user2ID)
        let cloudKitQuery2 = CKQuery(recordType: "Messages", predicate: predicate2)
        publicDatabase.performQuery(cloudKitQuery2, inZoneWithID: nil) { (messageRecords: [CKRecord]?, error: NSError?) in
            if error != nil
            {
                    print("-> cloudKitLoadMessage - userID2 error \(error)")
            }
            else
            {
                     print("-> cloudKitLoadMessage - user2Done - message")
                     foundRecords.apend(messageRecords[0])  
            }
        }
    }
    dispatch_group_notify(group, queue) {
            // This block will be executed when all tasks are complete
          print("All tasks complete")
          dispatch_semaphore_signal(notified)
    }
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER)
    dispatch_semaphore_wait(notified, DISPATCH_TIME_FOREVER)
    print("Semaphore done")
        // only call updateResults when queries 1 and 2 are done
        updateResults(foundRecords)
   }
Second function
func updateResults(messageRecords: [CKrecord]){
  // do something now that you got both messages  
}
Based some ideas from: https://gist.github.com/nbhasin2/735cd80298b5d47852f2
 
     
     
     
    