2017-10-26 27 views
1

AlamofireのDataResponse値を受け入れる方法を記述したいと思います。たとえば、DataResponse<Any>またはDataResponse<String>を渡すことがあります。私はこれを動作させる方法を見つけることができません。私はちょうどこの一般的なAlamofire DataResponseの値の参照方法

static func isTimeout(response: DataResponse) -> Bool { 
    if let error = response.result.error { 
     if error._code == NSURLErrorTimedOut { 
      return true 
     } 
    } 
    return false 
} 

のように「DataResonse」を使用してみた場合たとえば、私は、コンパイルエラーを取得:

Reference to generic type 'DataResponse' requires arguments in <...> 
Insert <Any>. 

私はDataResponse<Any>するパラメータの種類を変更した場合しかし、それはときに私のために動作しません。 have DataResponse<String>私は関数にDataResponse<String>を渡すしようとすると、私が取得、コンパイル・エラーがある:

Cannot convert value of type 'DataResponse<String>' to expected argument type 'DataResponse<Any>' 

私もDataResponse<AnyObject>を試してみましたが、 とDataResponse<Value>上記と同じエラーを持って、このエラーを得た:

Use of undeclared type 'Value' 

どれでもこれを行う方法に関するアイデアなので、ちょっと異なるパラメータタイプの関数を複製する必要はありませんか?

答えて

2

ジェネリック型を推測するのを忘れないでください。これを試してみてください:

static func isTimeout<T>(response: DataResponse<T>) -> Bool { 
+0

ああ、私はを関数名の後に入れる構文については知らなかった。だから私の上記の例では、DataResponse を試したとき、私がisTimeout を実行したとしたらうまくいったように見えますか?ありがとう!それは今働いている。 –

+1

はい、それはうまくいくはずです、それはちょうど名前のコンベンションです。 <>内のものは型パラメータと呼ばれ、Dictionary のKeyやValueなどの記述的なものもありますが、意味のある関係がない場合はT、U、Vなどの単一の文字を使用するのが一般的です –

関連する問題