如何评估Swift中的bool值?

时间:2014-06-03 00:22:55

标签: swift

我正在阅读Swift编程语言书,以获得熟悉的Swift语言和其他许多语言。

它说

  

在if语句中,条件必须是布尔表达式 - 这意味着如果得分{...}等代码是错误,而不是隐式比较为零。

我的理解条件必须评估bool值。即使它是一个整数值,它也行不通。但我不明白的是

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

这如何评估bool值。通常,我们使用let来创建常量。由于在Swift中隐式转换是不可能的,let convertedRank = Rank.fromRaw(3)如何评估条件必须的bool值?

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

fromRaw()返回该类型的可选项。因为每个Int都没有Rank,所以该函数将返回Rank或nil作为Rank可选。可选项只是将Bools置于if条件下的例外。如果Optional具有值,则它将评估为true,如果Optional为nil,则将其评估为false。

答案 2 :(得分:2)

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

protocol LogicValue {
    func getLogicValue() -> Bool
}

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

if-let构造,如其他答案中所述,是一个特殊情况,用于同时测试Option的nil和(如果不是)同时展开它。