Swift 2:for循环中的守卫语句?

22

在 for 循环内部使用 guard 的正确方式是什么?

for (index,user) in myUsersArray.enumerate() {

    guard user.id != nil else {
        print("no userId")
        //neither break / return will keep running the for loop
    }

    if user.id == myUser.id {

        //do stuff

    }
}

打印部分是否必要?可以使用“for in where”来解决。 - Brian Nickel
只是为了开发时的“信息”,可能仍然存在一些旧的开发者用户帐户。 - longbow
语法是 guard let...,你在 else 块中寻找的单词是 continue。但是,是的,使用 for in where 会更好。 - Fogmeister
3个回答

32

有几种方法可以创建条件语句:

您可以为整个for循环设置一个条件。它将在每次迭代时被调用。


for (index, user) in myUsersArray.enumerate() where check() {}
for (index, user) in myUsersArray.enumerate() where flag == true {}
你可以在for循环中检查某些内容,并跳过一个迭代或停止循环:
for (index, user) in myUsersArray.enumerate() {
    guard check() else { continue }
    guard flag else { break }
}

在您的情况下,我会写出类似这样的内容:

for (index, user) in myUsersArray.enumerate() {
    guard let userId = user.id, userId == myUser.id else { continue }

    // do stuff with userId
}

看起来不错,但你可以加一些描述你想要表达的意思的词语。 - Brian Nickel
@appzYourLife 这只是一些你可以使用条件语句的例子。 - Arsen

7
@Arsens的回答是正确的,但我认为这个更容易理解。
let ints = [1,2,3,4,5]

for (index,value) in ints.enumerate() {

        guard value != 1 else {
            print("Guarded \(value)")
            continue
        }

        print("Processed \(value)")
}

3
for (index,user) in myUsersArray.enumerate() {

    guard let userId = user.id else {
        print("no userId")
        continue;
    }

    if userId == myUser.id {

        //do stuff

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接