【问题标题】:How do I execute multiple guard statements within a loop?如何在循环中执行多个保护语句?
【发布时间】:2016-09-02 05:16:14
【问题描述】:

如何在一个循环中执行多个保护语句而不中断循环?如果一个保护语句失败,它会将我踢出当前循环迭代并绕过剩余的代码。

for user in users {
    guard let first = user["firstName"] as? String else {
        print("first name has not been set")
        continue
    }
    print(first)

    guard let last = user["lastName"] as? String else {
        print("last name has not been set")
        continue
    }
    print(last)

    guard let numbers = user["phoneNumbers"] as? NSArray else {
        print("no phone numbers were found")
        continue
    }
    print(numbers)
}

如何确保为每个用户执行所有语句?将 return 和 break 放在 else 块中也不起作用。谢谢!

【问题讨论】:

    标签: ios swift nsdictionary guard


    【解决方案1】:

    guard 语句的目的是检查一个条件(或尝试解开一个可选项),如果该条件为 false 或选项为 nil,那么您想退出您所在的当前范围。

    想象守卫声明是在说(用甘道夫的声音)“如果你不满足这个条件,你就不能通过......”。

    你想在这里做的事情可以简单地用if let语句来完成:

    for user in users {
      if let first = user["firstName"] as? String {
        print(first)
      } else {
        print("first name has not been set")
      }
      //Do the same for the other fields
    }
    

    需要注意的一点是,guard 语句中的guard let 将允许您在guard 语句之后访问未包装的值,而if let 将只允许您在下一个块中访问该值。

    【讨论】:

    • 太棒了!我知道“if let”语句会起作用,但我一直在尝试更频繁地使用警卫,所以我不知道是否有办法用警卫完成同样的任务。现在我知道得更多了。感谢您的澄清!
    • @user3353890:如果你使用completionhandler,你可以使用guard来完成它...
    • @user3353890 很高兴我能提供帮助,警卫是一个非常强大的工具,请注意我在回答中添加了一个小区别
    猜你喜欢
    • 2014-05-12
    • 2019-05-06
    • 1970-01-01
    • 2012-12-04
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2015-03-20
    相关资源
    最近更新 更多