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

2

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

这样做

if let definiteString = assumedString {
   print(definiteString)
}

相当于

if assumedString != nil {
   print(assumedString)
}

您可以在此处阅读有关隐式展开可选的更多信息

于 2016-12-12T12:32:07.747 回答
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. itemID无法转换为Int: 这意味着itemKeywill be nil,因此,第二部分甚至不会被测试,并且 if 的内容不会被执行。

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

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

于 2016-12-12T13:28:46.053 回答