所以如果我有一些如下所示的代码
func currentWeatherDictionaryfromjsonDictionary (jsonDictionary: [String: AnyObject]? ) -> CurrentWeather? {
if let currentWeatherama = jsonDictionary?["currently"] as? [String: AnyObject] {...
现在if let
语句中有两个选项,第一个是jsonDictionary
?第二个是从访问字典返回的可选值,它被强制转换为可选值(因为键可能不存在)。
问题是这个 if let
语句展开哪个可选,还是两者都有?
我认为代码只会打开第二个可选的,但是当我在 Playground 上玩耍时,似乎 jsonDictionary 也被打开了。想知道我是否是对的,因为我对此很陌生。还有,除了官方的 swift 指南之外,我还能在哪里找到更多关于语法的信息,因为该指南在很多情况下都没有详细说明。
最佳答案
这是一个“可选链”——一系列命令,如果其中任何一个失败,它会在中间中止。实际上这里发生了四件(或五件)事情:
if let currentWeatherama = jsonDictionary?["currently"] as? [String: AnyObject]
第一个
?
测试是否可以安全地展开可选的jsonDictionary
;如果成功,则提取生成的字典的
["currently"]
键的值,产生一个新的 Optional;一个命令,
as?
做两个事情:它测试 Optional 是否可以安全地展开,并且
它测试生成的展开值是否可以安全地转换为字典;
如果成功,结果将分配给
currentWeatherama
如果过程中有任何失败,if
测试会安静且安全地失败。
关于swift - 当两个可选项被分配给一个 if let 语句时,哪个被解包? swift 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30895424/