当字典键上的 Swift "if let ... " 失败时会发生什么?

What happens when a Swift "if let ... " on a Dictionary key fails?

我有一本字典,当其中没有符合特定条件的预先存在的值时,它会被故意设置为失败。

所有其他时间,此命令都有效,但只有一次。我希望我做对了……失败意味着什么也没有发生。我不需要 else 或任何其他应急代码。

但是是这样吗?

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

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

当您隐式解包一个可选值时,您在一条语句中检查并解包它的值。所以你不需要任何错误处理代码

这样做

if let definiteString = assumedString {
   print(definiteString)
}

等同于

if assumedString != nil {
   print(assumedString)
}

您可以阅读更多关于隐式解包可选 here

也不完全对,问题是转换成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. itemID 无法转换为 Int:这意味着 itemKey 将是 nil,因此,第二部分甚至不会被测试,if 的内容也不会被执行。

  2. itemID 可以转换为 Int,但它不是现有密钥:在这种情况下,itemKey 将设置为 [=13] =] itemID 转换为。然后,将测试第二条语句,但由于找不到 itemKey 作为现有键,因此 myDictionary[itemKey] 将 return nil 再次,if 的内容将不被执行。

  3. itemID 可以转换为作为字典键存在的 Int。和前面的情况一样,会设置itemKey,既然找到了key,就会填充myTestKonstant,执行if的内容,除非key对应的值为nil(如 [3: nil])。