有没有办法在Swift的guard语句中包含多个条件?
例如,如果我想使用guard检查两个可选值为零,我应该如何使用单个guard语句来实现?
发布于 2016-08-29 13:47:25
检查此代码
func demo(){
var str = [String: String]()
str["status"] = "blue"
str["asd"] = nil
guard let var2 = str["asd"], let var1 = str["status"]
else
{
print("asdsfddffgdfgdfga")
return
}
print("asdasdasd")
}
守卫将逐一检查情况。如果第一个为真,那么它将检查下一个。否则,它将执行
否则
部分。
发布于 2019-01-31 07:59:44
为了回答Prabhav的问题,是的,你是正确的,在一个
守卫
语句必须为true才能继续(即,不进入else块)。从这个意义上说,它确实像是用AND逻辑分隔条件。
你
可以
实现OR逻辑,不是使用逗号,而是使用布尔条件:
guard
true || false // this guard statement evaluates to true
else
{
print("no, not all values in the guard were true")
return
}
print("yes, all of the values in the guard were true") // this is printed
或or与and逻辑的组合,通过使用布尔条件和可选绑定的组合:
let testString: String? = nil
guard
true || false,
let x = testString, // this guard statement evaluates to false
true
else
{
print("no, not all values in the guard were true") // this is printed
return
}
print("yes, all of the values in the guard were true")
这篇来自Apple的摘要,是关于可选绑定的
如果
语句同样适用于
守卫
声明:
您可以根据需要在单个if语句中包含任意多个可选绑定和布尔条件,用逗号分隔。如果可选绑定中的任意值为nil或任何布尔条件的计算结果为false,则整个If语句的条件都被视为false。以下if语句是等效的:
if let firstNumber = Int("4"), let secondNumber = Int("42"),
firstNumber < secondNumber && secondNumber < 100
{
print("\(firstNumber) < \(secondNumber) < 100")
} // Prints "4 < 42 < 100"
if let firstNumber = Int("4")
{
if let secondNumber = Int("42")
{
if firstNumber < secondNumber && secondNumber < 100
{
print("\(firstNumber) < \(secondNumber) < 100")
}
}
} // Prints "4 < 42 < 100"
https://stackoverflow.com/questions/39198626
复制相似问题