【发布时间】:2016-01-07 22:06:34
【问题描述】:
在尝试访问可选类中的可选属性的值时,我注意到一些有趣的行为,而尝试访问可选字典中的可选值的值。
在前一种情况下,您似乎只需要打开一次即可访问该值。但是,在后一种情况下,您必须解包两次才能访问该值。我想知道为什么会这样,并希望有人能给我一些见解!
以下是访问可选类中可选属性值的示例
class Cat{
var food : Food?
}
class Food{
var amount : Int?
}
var meowzer = Cat()
meowzer.food = Food()
meowzer.food?.amount = 10
var catFoodAmt = meowzer.food?.amount
print("\(catFoodAmt)")
if let catFoodCount = meowzer.food?.amount{
print("\(catFoodCount)")
}
第一个打印语句的结果是:
Optional(10)
第二条打印语句(展开后)的结果是:
10
下面是访问可选字典中可选值的值的示例
var dog : [String : Int?]?
dog = ["treat_count" : 10]
var dogTreatAmt = dog?["treat_count"]
print("\(dogTreatAmt)")
if let dogTreatCount = dog?["treat_count"] , dogTreatCountFinal = dogTreatCount{
print("\(dogTreatCount)")
print("\(dogTreatCountFinal)")
}
第一个打印语句的结果是:
Optional(Optional(10))
第二个打印语句的结果(解包一次后)是:
Optional(10)
第三条打印语句的结果(解包两次后)是:
10
为什么在第二种情况下我需要解包两次才能访问所需的值,而不是第一种?
我的猜测是,如果我使用“treat_count”以外的键(例如“count”),那么该键的值将为零。但是,我无法找到 iOS“规则”或更好的解释为什么会这样。任何帮助将不胜感激。
【问题讨论】:
-
[String : Int?]是理论上的,实际上字典中的任何键和值都不能是nil