0

私は2つの関数を持っています:とfunc males_NonChat() viewdidloadでprint文を実行する前に両方が終了するのを待ちます。それを達成するために別の補完ハンドラが必要ですか?次の行コードを実行する前に、2つの非同期完了関数が終了するのを待つ

使用これらの関数は

override func viewDidLoad() { 
    super.viewDidLoad() 
    func Females_NonChat() 
    func males_NonChat() 

    print("finished executing both asynchronous functions") 
} 

func Females_NonChat(){ 
    Anon_Ref.child("Chatting").child("female").observeSingleEventOfType(.Value, withBlock: {(snapshot) in 
     if let FemInChatting = snapshot.value as? [String : String] { 
      print("executing") 
     } 
    }) 
} 

func males_NonChat(){ 
    Anon_Ref.child("Chatting").child("male").observeSingleEventOfType(.Value, withBlock: {(snapshot) in 
     print("executing") 
    }) 
} 
+4

一体何が 'FUNC Females_NonChat(ある;:すべてのコールは「去る」対応で一致している「と入力しますが、」呼び出したときにグループ通知を設定し、各非同期メソッドの、およびfunc males_NonChat() 'を' viewDidLoad'に追加しましたか?それは法律上のスウィフトでさえない。 _compiles_(可能な場合)を提供するコード。 – matt

+0

これは、http://stackoverflow.com/questions/11909629/waiting-until-two-async-blocks-are-executed-before-starting-another-block?rq=1の合計複製で、関連リストの最初に表示されます。あなたは尋ねる前に検索しようとしましたか? – matt

+0

@matt私が知っている限り、私たちはSwiftで入れ子関数を使うことができるので、関数は内部に別の関数を含むことができますか? –

答えて

3

一般的にあなたは、ディスパッチグループを使用し、各非同期メソッドの前にグループを入力し、完了時にグループを残したい...オンラインデータベースから情報を要求するためのfirebase完了ハンドラです)

override func viewDidLoad() { 
    super.viewDidLoad() 

    let group = dispatch_group_create() 

    dispatch_group_enter(group) 
    Females_NonChat() { 
     dispatch_group_leave(group) 
    } 

    dispatch_group_enter(group) 
    males_NonChat() { 
     dispatch_group_leave(group) 
    } 

    dispatch_group_notify(group, dispatch_get_main_queue()) { 
     print("finished executing both asynchronous functions") 
    } 
} 

func Females_NonChat(completionHandler:() ->()) { 
    Anon_Ref.child("Chatting").child("female").observeSingleEventOfType(.Value) { snapshot in 
     if let FemInChatting = snapshot.value as? [String : String] { 
      print("executing") 
     } 
     completionHandler() 
    } 
} 

func males_NonChat(completionHandler:() ->()) { 
    Anon_Ref.child("Chatting").child("male").observeSingleEventOfType(.Value) { snapshot in 
     print("executing") 
     completionHandler() 
    } 
} 
+0

私はこれを試していますが、何らかの理由で私の機能が呼び出されていません。私はそれらをどこかに呼び出さなければならないのですか? –

+0

が問題を発見しました。問題は、あなたのコードでは、dispatch_group_enterブロックを使って関数を作成したことです。 –

+0

あなたは 'func males_NonChat()'と言っていますが、それは 'males_NonChat()'でなければなりません。 –

関連する問題