以前に宣言された変数にオプションのバインドを使用できませんか? if let
とguard
が存在するようになったのはこのような自然なことです。Swiftでのオプションのバインディングと管理スコープの使用
var jsonData:AnyObject?
if jsonData = try? NSJSONSerialization.JSONObjectWithData(data, options: []) {
//use jsonData! safely
}
//still be able to use jsonData?
それとも
var jsonData:AnyObject?
guard jsonData = try? NSJSONSerialization.JSONObjectWithData(data, options: []) else {
print("Could not parse JSON")
}
//still use jsonData?
なぜスコープの制限:私はの行で何かを考えていますか?いつでもどこでも変数を使用するために開いたままにしておきましょうか?
私はそもそもif let
とguard
の本来の目的ように見えたものですどのオプションをアンラップ(条件付きコードを実行)/割り当てるときに、2つの別々のステートメントを避けているやろうとしています:
var jsonData: AnyObject?
jsonData = try? NSJSONSerialization.JSONObjectWithData(data, options: [])
if(jsonData != nil) {
//use jsonData! safely
}
//still use jsonData?
これについては、クールな方法がありますか、または2つのステートメントを使用する唯一のオプションはありますか?再びコードを見ている
EDIT
、私は特定の重要なオプションの変数をアンラップ流れの主要なリダイレクトなし/割り当てる際print()
メッセージにしようとしたとき、このシナリオの私の主な用途があることがわかります。ここに私の実際コードからキー文は、次のとおりです。
if let
と
guard
が正確にこれらの二つの文をマージするために作られたが、私はそれは、彼らが何であったか、実際にはないことを感じを得ているという印象の下にあった
jsonData = try? NSJSONSerialization.JSONObjectWithData(data, options: [])
if(jsonData == nil) {
print("Could not parse data")
}
のために意図された。私はCode Reviewに私の質問のより明確な説明を掲載したいと思う。
'jsonData'が' nil'の場合は使用する必要がありますか?それが 'nil'だった場合は、次の行で何をしていますか?私にとって、それに対する答えは主にあなたの状況に対処する最善の方法に影響します。 – nhgrif
@nhgrif後で起こるのは、HTMLステータスコードが成功したかどうかを確認し、成功した失敗ステータスコードの4つの組み合わせをnil-notnil jsonDataで処理する必要があることです。それは後で 'nil'をチェックしなければならないことを意味しますが、これらのif文をすべて減らそうとしています。 – frezq
実際のコードを掲載することはできますか?実際に具体的な実装があり、それが期待どおりに動作していても、より洗練された、より簡潔な実装方法を知りたい場合は、[Code Review](http://codereview.stackexchange.com/help/on-topic)。現在の実装を実際に見ることなく、多くのアドバイスをすることは難しいでしょう。 – nhgrif