我正在阅读Swift编程语言书,以获得熟悉的Swift语言和其他许多语言。
它说
在if语句中,条件必须是布尔表达式 - 这意味着如果得分{...}等代码是错误,而不是隐式比较为零。
我的理解条件必须评估bool值。即使它是一个整数值,它也行不通。但我不明白的是
if let convertedRank = Rank.fromRaw(3) {
let threeDescription = convertedRank.simpleDescription()
}
这如何评估bool值。通常,我们使用let来创建常量。由于在Swift中隐式转换是不可能的,let convertedRank = Rank.fromRaw(3)
如何评估条件必须的bool值?
答案 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)
if
,where
等中的条件实际上并不需要是Bool;它可以是任何实现LogicValue
协议的类型:
protocol LogicValue {
func getLogicValue() -> Bool
}
在评估条件语句时隐式调用getLogicValue()
方法。
if-let
构造,如其他答案中所述,是一个特殊情况,用于同时测试Option的nil和(如果不是)同时展开它。