2016-07-06 16 views
1

クロージャ内でデリゲートパターンを使用して非同期で結果を返すメソッドを使用したいと思います。Swift:別の関数でコールクローズ完了メソッドを呼び出す

完全なブロックを同じクラス内の別の関数内で参照することはできますか?

class A { 

    func performASyncTask(input:String, complete:(result:String) -> Void) { 

     let obj = Loader() 
     obj.delegate = self 
     obj.start() 
     // Loader() returns loaderCompleteWithResult(result:String) when completed 
    } 

    func loaderCompleteWithResult(result:String){ 

     // Call complete function in performASyncTask .e.g 

     complete(result); // Calls the complete function in performASyncTask 
    } 
} 
+0

これは少し難解ですが、詳しく説明できますか? – Alexander

+0

クラスのプロパティとしてcloseをストアしてください。 – dan

+0

@AMomchilov特に理解していないことはありますか? – xoogler

答えて

0

私はあなたが達成したいことを本当に理解していません。しかし、関数のプロパティを宣言して後で使用することができます。

class A { 
    var closureSaver: ((result:String) -> Void)? 

    func performASyncTask(input:String, complete:(result:String) -> Void) { 
     let obj = Loader() 
     obj.delegate = self 
     obj.start() 

     closureSaver = complete 
     complete(result: "a") 
    } 

    func loaderCompleteWithResult(result:String){ 
     closureSaver?(result:result) 
    } 
} 
+0

変数名は動詞または動詞句であってはならず、名詞でなければなりません – Alexander

関連する問題