Swift 防护装置不退出功能
这可能是一个非常愚蠢的问题,但请容忍我: 据我所知,在阅读了文档和其他网站上的各种示例后,Swift 防护装置不退出功能,swift,guard,control-flow,Swift,Guard,Control Flow,这可能是一个非常愚蠢的问题,但请容忍我: 据我所知,在阅读了文档和其他网站上的各种示例后,guard语句检查bool。如果为true,则当前作用域将继续执行。如果不是,则执行else子句。这里应该使用return语句退出当前范围。然而,这对我不起作用 基本上:为什么返回不退出此函数? class Person { var name: String init (name: String) { self.name = name } func re
guard
语句检查bool。如果为true,则当前作用域将继续执行。如果不是,则执行else
子句。这里应该使用return
语句退出当前范围。然而,这对我不起作用
基本上:为什么返回
不退出此函数?
class Person {
var name: String
init (name: String) {
self.name = name
}
func reverseNameUnlessItsHans() {
guard name == "Hans" else { //should exit the scope...
print("It's Hans")
return
}
self.name = String(name.characters.reversed()) //...yet this is executed
}
}
var myPerson = Person(name: "Hans")
myPerson.reverseNameUnlessItsHans()
print(myPerson.name) //prints "snaH"
您正在防范name==“Hans”的情况
将您的反面改为在防护罩内,印刷品应替换您所说的“如果是真的,当前范围继续执行”的反面,这是正确的
name==“Hans”
为true,因此继续执行,而不执行else子句。行为与您描述的一模一样。如果guard
的语义令人困惑,您可以在脑海中用“确保”或“断言”或“确保”来代替它。这就是您应该阅读的方式。要继续这个范围,这必须是正确的。继续Rob所说的:“但是如果它不是我们所期望的,那么遵循else语句并退出范围”让它更有意义将print(“它是Hans”)
更改为print(“它不是Hans”)