オプションの暗黙的に開封されたそれは完全ではありません詳細を読むことができます問題は、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)
}
UPDATE
だからそれが明確です異なる場合に起こることを説明します。
itemID
はInt
に変換できません:これはitemKey
がnil
になることを意味します。したがって、2番目の部分はテストされず、ifの内容は実行されません。
itemID
はInt
に変換することができますが、それは既存のキーではありません。この場合itemKey
はInt
itemID
に設定されますに変換されます。次に、2番目のステートメントがテストされますが、itemKey
は既存のキーとして見つからないため、myDictionary[itemKey]
はnil
を返し、再びifの内容は実行されません。
itemID
は、辞書のキーとして存在するInt
に変換できます。前のケースと同様に、itemKey
が設定され、キーが見つかったので、nil
([3: nil]
のような)でない限り、myTestKonstant
が埋められ、ifの内容が実行されます。
はい、キーが辞書に見つからない場合、 'if'ステートメントのカッコ内のコードは単に実行されず、' if'ステートメントの後で再開します。 – Rob
はい@Robが正しいです。これは、そのキーの値がdictに存在しない場合、クラッシュを防止します。 – PiyushRathi
あなたの*キー*がオプションであると考えてください。 – vadian