gpt4 book ai didi

Swift: guard let 和 where - 优先级

转载 作者:搜寻专家 更新时间:2023-11-01 06:36:04 26 4
gpt4 key购买 nike

有时,我想使用 guard结合 let & where简化我的代码。但我想知道 let 的优先级是什么以及在哪里。例如:

class Person {
func check() -> Bool? {
print("checking")
return nil
}
}

func test(dont: Bool) {
let person = Person()
guard let check = person.check() where dont else {
print("should not check")
return
}
print("result: \(check)")
}


test(false)

正如您所看到的控制台结果,打印的输出是:

  • 检查
  • 不应该检查

对于let check = person.check() where dont的情况在guard <condition> else { }语法,甚至是 where 中的表达式与let中的表达式结果无关, Swift 似乎执行 let先检查where之后。有时在我的代码中,let可选绑定(bind)需要大量计算并且 where只是一个不依赖let的简单条件结果,我应该移动 where 吗?来自 guard ?或者我对优先级或让与哪里有误?

最佳答案

你是对的,在你的Swift 2代码中

guard let check = person.check() where dont else { }

首先检查条件绑定(bind)let check = ...,只有成功时,才检查 bool 条件dont。你可以使用

guard dont, let check = person.check() else { }

首先检查 bool 条件。

语法中的这种“不对称”在 Swift 3 中被移除了:所有的保护子句都用逗号和where 关键字不再使用。所以你有

guard let check = person.check(), dont else { }
// or
guard dont, let check = person.check() else { }

条件从左到右检查短路,即,如果一个条件失败,则不执行 else block 检查剩余条件。

关于Swift: guard let 和 where - 优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41497289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com