応答ステータスコードを検証していないため、404が.Success
のケースを返す可能性があります。 responseData
シリアライザーが行うのは、エラーがなかったこと(応答ステータスコードを検証していないためエラーが発生しないこと)、またはデータが存在することを検証することだけです。
public static func dataResponseSerializer() -> ResponseSerializer<NSData, NSError> {
return ResponseSerializer { _, _, data, error in
guard error == nil else { return .Failure(error!) }
guard let validData = data where validData.length > 0 else {
let failureReason = "Data could not be serialized. Input data was nil or zero length."
let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason)
return .Failure(error)
}
return .Success(validData)
}
}
あなたの場合、エラーをスローしていない404を受信しており、サーバーはデータを返しています。 したがって、 responseData
シリアライザーは成功します。 404が常にエラーをスローすることが予想される場合は、 responseData
の前に.validate(statusCode: [200])
メソッドを追加で使用する必要があります。 詳細については、READMEの検証セクションをご覧ください。
将来的には、このような質問は、 alamofire
タグを使用したスタックオーバーフローに適しています。 バグや機能のリクエストにはGitHubを使用しています。 🍻
貢献ガイドラインから
GitHubをサポートフォーラムとして使用していません。 プロジェクト自体に固有ではない使用法に関する質問については、代わりにStackOverflowで質問してください。 そうすることで、問題をすばやく解決できる可能性が高くなり、同じ質問を持つ他の人が答えを見つけられるようになります。 これにより、メンテナは他の人のためにプロジェクトの改善に集中することもできます。
本当に感謝しております
私はこの問題に苦しんでいます...どうもありがとうございました。
最も参考になるコメント
応答ステータスコードを検証していないため、404が
.Success
のケースを返す可能性があります。responseData
シリアライザーが行うのは、エラーがなかったこと(応答ステータスコードを検証していないためエラーが発生しないこと)、またはデータが存在することを検証することだけです。あなたの場合、エラーをスローしていない404を受信しており、サーバーはデータを返しています。 したがって、
responseData
シリアライザーは成功します。 404が常にエラーをスローすることが予想される場合は、responseData
の前に.validate(statusCode: [200])
メソッドを追加で使用する必要があります。 詳細については、READMEの検証セクションをご覧ください。将来的には、このような質問は、
alamofire
タグを使用したスタックオーバーフローに適しています。 バグや機能のリクエストにはGitHubを使用しています。 🍻貢献ガイドラインから
質問をする
GitHubをサポートフォーラムとして使用していません。 プロジェクト自体に固有ではない使用法に関する質問については、代わりにStackOverflowで質問してください。 そうすることで、問題をすばやく解決できる可能性が高くなり、同じ質問を持つ他の人が答えを見つけられるようになります。 これにより、メンテナは他の人のためにプロジェクトの改善に集中することもできます。