ios - How to detect two different queries are completed to then call another function in swift? -


my function runsqueries runs 2 different queries. , need these 2 queries completed before can call updateresults function.

what best approach done? i've tried few different things nothing worked 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) {             // block executed when tasks 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")          // call updateresults when queries 1 , 2 done         updateresults(foundrecords)     } 

second function

func updateresults(messagerecords: [ckrecord]){    // got both messages    } 

based ideas from: https://gist.github.com/nbhasin2/735cd80298b5d47852f2

use "dispatch gruop" , put 2 query in 2 different dispatch block.

see answer: https://stackoverflow.com/questions/11909629/waiting-until-two-async-blocks-are-executed-before-starting-another-block