2016-10-21 3 views
0

(Swift 2.2、Alamofire 3.0)responseJSONに対するAlamofireの応答の具体的なタイプは何ですか?

私はREST呼び出しの多くの後に私が適用するかなり複雑なエラー/状態チェックプロトコルを持っていて、自然にこのコードを再利用したいと思います。

Alamofire.request(.POST, "some/rest/url", params, encoding:.JSON) 
     .validate() 
     .responseJSON { response in 
      // This is what I'd like to do 
      self.myAwesomeMethod(response) 

私の問題は、私は私の結果のswitch文では、定数を使用しようとするものに応じて、myAwesomeMethodを宣言しています。もちろん

は、ちょうどresponseJSONクロージャ内で作業し、すべてが互角のドーリーです:

switch response.result { 
      case .Failure(let error): 
       handleGracefully(error) 
       return 
      case .Success: 
       // 4. Profit 
      } 

しかし、私はmyAwesomeMethodにそのスイッチブロックを移動しようとすると、私はいくつかの方法をトリップします。私はresultの正しい宣言を見つけることができないようで、私のケースでは明示的な列挙型が.Failure.Successであるかどうか分かりません。

私たちは4タプルを渡してきました。私は、ソースを突き刺した後、いくつかの方法で宣言しようとしました。ここに私の最新のものです:

private func myAwesomeMethod(
    afResponse: (_, 
       response: NSHTTPURLResponse?, 
       result: Result<Value, Error>?, 
       error: NSError?)) { 

     switch afResponse.result { 
    case .Failure(let error): 
     beGraceful(error) 
     return 
    case .Success: 
     // 4. Profit 
    } 
    ... 

しかし、Result<Value, Error>Valueは私、この取得:

宣言されていないタイプの使用 'を値'

しかし.Failure.Successはコンテキストではありません結果の中に定義されているので、他の宣言がそれらにアクセスできないという結果になります。

私は構成部分の開梱を試みましたが、実際には問題は変わりませんでした。私はいつもmyAwesomeMethod.responseJSONコールを使用していますので、ここで私を節約するValueのために使用できるいくつかのタイプがあることを願っています。

誰にでもアイデアはありますか? @ジョンSchierから右方向へのプッシュに


固定おかげ

ヘルパー関数の宣言はかなりオフになっていました。私が実際に必要としたのは以下の通りでした:

private func myAwesomeMethod(afResponse: Response<AnyValue, NSError>) 

その後はすべてがとても幸せそうです。

答えて

1

responseJSONの実装はあなたにその質問に答えます。それはResult<AnyObject, NSError>です。

+0

これはパラメータを渡す問題を最も確実に解決します。ありがとうございます。振り返ってみると、私はそれを見つけ出すべきだったはずだが、これは私の最初のスウィフトロデオである。 '.Failure'と' .Success'列挙定数はまだ表示されません: > Enumの場合 'Failure'型が 'Result ?' そこにはどんな考えがありますか? – Dilapidus

+1

結果タイプを使用している場合は、必ずAlamofireをインポートしてください。 –

+0

私はそれをインポートしています。うーん..私はこのプロジェクトを継承し、ソースを直接引き出します。それがこの問題に関係していないのだろうか。 – Dilapidus

関連する問題