当字典键上的 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)
}
更新
所以更清楚了,我将解释在不同情况下会发生什么:
itemID
无法转换为 Int
:这意味着 itemKey
将是 nil
,因此,第二部分甚至不会被测试,if 的内容也不会被执行。
itemID
可以转换为 Int
,但它不是现有密钥:在这种情况下,itemKey
将设置为 [=13] =] itemID
转换为。然后,将测试第二条语句,但由于找不到 itemKey
作为现有键,因此 myDictionary[itemKey]
将 return nil
再次,if 的内容将不被执行。
itemID
可以转换为作为字典键存在的 Int
。和前面的情况一样,会设置itemKey
,既然找到了key,就会填充myTestKonstant
,执行if的内容,除非key对应的值为nil
(如 [3: nil]
)。
我有一本字典,当其中没有符合特定条件的预先存在的值时,它会被故意设置为失败。
所有其他时间,此命令都有效,但只有一次。我希望我做对了……失败意味着什么也没有发生。我不需要 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)
}
更新
所以更清楚了,我将解释在不同情况下会发生什么:
itemID
无法转换为Int
:这意味着itemKey
将是nil
,因此,第二部分甚至不会被测试,if 的内容也不会被执行。itemID
可以转换为Int
,但它不是现有密钥:在这种情况下,itemKey
将设置为 [=13] =]itemID
转换为。然后,将测试第二条语句,但由于找不到itemKey
作为现有键,因此myDictionary[itemKey]
将 returnnil
再次,if 的内容将不被执行。itemID
可以转换为作为字典键存在的Int
。和前面的情况一样,会设置itemKey
,既然找到了key,就会填充myTestKonstant
,执行if的内容,除非key对应的值为nil
(如[3: nil]
)。