【问题标题】:Guard does not exit functionGuard 不退出功能
【发布时间】:2017-07-13 04:02:36
【问题描述】:

这可能是一个非常愚蠢的问题,但请耐心等待: 据我了解,在阅读了其他网站上的文档和各种示例后,guard 语句会检查布尔值。如果为真,则当前范围继续执行。如果不是,则执行 else 子句。这里应该使用return 语句来退出当前范围。但是这对我不起作用。

基本上:为什么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" is true,所以执行继续,else 子句不被执行。行为与您描述的完全一样。
  • 如果guard 的语义令人困惑,您可以在脑海中将其替换为“确保”或“断言”或“确保”。这就是你应该如何阅读它。这必须是真的才能继续这个范围。
  • 继续 Rob 所说的:“但如果它不是我们所期望的,那么请遵循 else 语句并退出范围” 让它更有意义的更改 @987654328 @ print("It's NOT Hans")

标签: swift guard control-flow


【解决方案1】:

您正在防范 name == "Hans" 的情况

把你的反面改成在后卫里面,印刷品应该代替反面

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2013-07-13
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多