2016-04-25 6 views
0

私の目標は、順番に実行する関数の配列を持つことです。は、クロージャ付きの関数の配列を格納します。

static func GetData(success:(() ->())?, failure:((response : NSURLResponse, error : NSError) ->())?){ 
     //do something asynchronous. make web service call 

     success?() 
     //or 
     failure?(response: urlResponse, error: errorThrown) 
} 

次に、ビューコントローラでは、上記のような関数を配列に格納しようとしています。私の目標は、この配列を繰り返し処理し、次々に関数を実行することです。これは、各関数が前の関数から返されたデータに依存するためです。私は機能を保存するたびに、私は私のビューコントローラに列挙今

enum MyEnum { 
    case GetData() 
    case GetData2()...and so on 
    //and every other function is put here 
} 

を作っ

だから、私は配列

funcs.append(MyEnum.GetData(DataAccess.GetData({ 
     //do stuff 

     }, failure: { (response, error) in 

    }))) 

funcs.append(MyEnum.GetData2(DataAccess.GetData2({ 
      //do stuff 

      }, failure: { (response, error) in 

     }))) 

にこれを追加しかし、それが自動的に実行されます。どのような閉鎖もなければ私はそれを行うことができると思うが、私はどのように進行するかを決める必要がある。

これを行うには良い方法がありますか?何か不足していますか?

はクロージャを持つ関数の配列を格納することは自動的に実行

var arrayOfFuncs = [ 
     DataAccess.GetData1({ 
      print("success") 
      }, failure: { (response, error) in 
       print("failure") 
     }), 

     DataAccess.GetData2({ 
      print("ok") 
      }, failure: { (response, error) in 
       print("ee") 
     }) 
    ] 
+0

列挙型の作成のポイントは何ですか?関数を配列に入れるだけでもっと簡単になりますか? –

+1

私はこの質問を参照していたhttp://stackoverflow.com/questions/24418951/array-of-functions-in-swift – prawn

+0

関数のシグネチャが異なるため、その質問で列挙が使用されました。あなたが見ることができるように、あなたは同じ署名を持っているので、それらを直接配列に格納することができます。 –

答えて

1

のGetDataは、2つのクロージャではないが、パラメータとして2つのクロージャをとります。私はenumで何をしているのか分かりません。

typealias Block =() -> Void 
typealias Error = (NSURLResponse,NSError) -> Void 

var funcs = [(Block,Error)] 

func.forEach{ f => f._0() } // call success() 


// Or you could do this 
typealias Getter = (Block,Error) -> Void 
var funcs2 = [Getter] 
funcs2.append(DataAccess.GetData) 
関連する問題