2016-04-27 4 views
1

私はSwiftでurlリクエストを作成していますが、レスポンスコードを含む意味のあるエラーを出力したいと考えています。私は可能な限り数行のコードでこれをやろうとしています。私がXcodeで得ているエラーは、次のとおりです:Variable declared in 'guard' condition not usable in its body本文のガード条件を使用する

コードをより多くの行に拡張することなく、以下を実行するにはどうすればいいですか?

//check to see if we got a valid response code 
    guard let resCode = (response as? NSHTTPURLResponse)?.statusCode where resCode == 200 else { 
     return NSError(domain: "Error with request", code: 1, userInfo: [NSLocalizedDescriptionKey: "Recieved the following status code: \(resCode)"]) 
    } 

エラーは私がガード文の本体内の変数resCodeを使用しようとすると発生します。

+0

varの代わりに '(NSHTTPURLResponse)?statusCode'を使用するだけです。 –

+0

' response'の隣に 'error'パラメータがあると、' response'はエラーがなければ 'nil'になりそうです返され、HTTPリクエストを送信した場合、そのレスポンスはHTTPレスポンスである可能性が最も高くなります。 – vadian

答えて

5

エラーとして、ガードステートメントの本体の中のガードステートメントにバインドした変数を使用することはできません。変数は、ガードボディが入力されていない場合にのみバインドされます。

guard let httpResponse = response as? NSHTTPURLResponse else { 
    return NSError(domain: "Error with request", code: 1, userInfo: [NSLocalizedDescriptionKey: "Invalid response: \(response)"]) 
} 

guard httpResponse.statusCode == 200 else { 
    return NSError(domain: "Error with request", code: 1, userInfo: [NSLocalizedDescriptionKey: "Recieved the following status code: \(httpResponse.statusCode)"]) 
} 

にしようとしないでください。また、あなたの応答がnilであると、あなたのステータスコードが200

ない場合、次の2つの異なるチェックに文を破る必要がある場合を区別されていません読みやすさや正確さを犠牲にしてコード行数を最小限に抑えます。

関連する問題