【问题标题】:How does let evaluate a bool value in Swift?let 如何在 Swift 中评估布尔值?
【发布时间】:2014-06-03 00:22:55
【问题描述】:

我正在阅读 Swift 编程语言书,以便像其他人一样熟悉 Swift 语言。

上面写着

在 if 语句中,条件必须是布尔表达式——这意味着 if score { ... } 之类的代码是错误的,而不是与零的隐式比较。

我理解该条件必须评估一个布尔值。即使它是一个整数值,它也不起作用。但我不明白的是

   if let convertedRank = Rank.fromRaw(3) {
         let threeDescription = convertedRank.simpleDescription() 
}

这如何评估布尔值。通常,我们使用 let 创建一个常量。由于在 Swift 中无法进行隐式转换,let convertedRank = Rank.fromRaw(3) 如何评估条件必须的 bool 值?

【问题讨论】:

    标签: swift


    【解决方案1】:

    除了布尔值之外,if 语句 can also take optionals,条件评估可选是否具有值。这个特殊的结构称为"optional binding"

    【讨论】:

    • 明确地说,if-let 是一个特例。 let x = something 不会评估为可选:it has no value.
    【解决方案2】:

    fromRaw() 返回一个可选类型。因为没有每个 Int 的 Rank,所以该函数将返回 Rank 或 nil 作为 Rank 可选。选项是仅在 if 条件下使用布尔值的例外。如果 Optional 有值,它将评估为 true,如果 Optional 为 nil,它将评估为 false。

    【讨论】:

      【解决方案3】:

      ifwhere 等中的条件实际上不需要是 Bool;它可以是任何实现LogicValue 协议的类型:

      protocol LogicValue {
          func getLogicValue() -> Bool
      }
      

      getLogicValue() 方法在评估条件语句时被隐式调用。

      if-let 构造,如其他答案中所述,是同时测试 nil 的 Optionals 和(如果不是)同时解包它的特殊情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-28
        • 2019-07-22
        • 2012-03-13
        • 1970-01-01
        • 2011-08-28
        • 2012-06-04
        • 1970-01-01
        • 2011-07-31
        相关资源
        最近更新 更多