Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 防护装置不退出功能_Swift_Guard_Control Flow - Fatal编程技术网

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”)