1

特定の基準に一致する既存の値がない場合に失敗するように意図的に設定された辞書があります。

それ以外の場合、このコマンドは機能しますが、1 回だけです。私はこれを正しく行っていることを願っています...失敗は何も起こらないことを意味します。else緊急コードは必要ありません。

しかし、そうですか?

if let myTestKonstant = myDictionary[Int(store.itemID)]{
         // successful assignment code here   
        }

// where I'm hoping a failure to assign falls through to...
4

2 に答える 2

1

完全に正しいわけではありません。問題は、int への変換もオプションであることです。たとえば、これはクラッシュします (というか、コンパイル エラーが発生します)。

let myDictionary = [3: "3"]
let itemID = "b"
if let myTestKonstant = myDictionary[Int(itemID)] {
    print(myTestKonstant)
}  

これは保存方法です:

if let itemKey = Int(itemID), let myTestKonstant = myDictionary[itemKey] {
    print(myTestKonstant)
}

アップデート

より明確に、さまざまなケースで何が起こるかを説明します。

  1. itemIDcan't be convert to an Int: これは、 thatitemKeyが になることを意味しますnil。したがって、2 番目の部分はテストされず、 if の内容は実行されません。

  2. itemIDに変換できますがInt、既存のキーではありません。この場合itemKey、 に設定され、Int itemIDに変換されます。次に、2 番目のステートメントがテストされitemKeyますが、既存のキーとして見つからないため、myDictionary[itemKey]戻りnilますが、if の内容は実行されません。

  3. itemIDInt辞書のキーとして存在するに変換できます。前のケースと同様に、itemKeyが設定され、キーが見つかったので、が入力され、キーの対応する値が(のように)myTestKonstantでない限り、if の内容が実行されます。nil[3: nil]

于 2016-12-12T13:28:46.053 に答える