swift - 当两个可选项被分配给一个 if let 语句时,哪个被解包? swift 语言

标签 swift option-type

所以如果我有一些如下所示的代码

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/

相关文章:

swift - CGContext.init 返回 nil

haskell - 在 State Monad 中构建错误处理的最小 Haskell 示例

swift - 仅当变量的当前值非 nil 时才更改 Swift

ios - 正则表达式不再工作(Swift 1.2)

java - 如何正确使用Optional和 `@RequestBody`?

swift - 获取特定区域的节点列表?

swift - 我可以将我的类的子类作为 Swift 中的属性吗?

Swift:检查 NSArray 中的哪个值最接近另一个给定值

ios - Xcode/swift : No such module 'GeoFire'

java - 如何避免在 java lambda 表达式中定义单个元素数组