Swift -离开dispatchGroup时是否需要调用continue

Swift -is it necessary to call continue when leaving a dispatchGroup

我有一组对象,我必须使用 for-loopDispatchGroup 循环访问这些对象。在 for-loop 中离开群组时,是否需要调用 continue

let group = DispatchGroup()

for object in objects {

    group.enter()

    if object.property == nil {
         group.leave()
         continue // does calling this have any effect even though the group is handling it?
    }

    // do something with object and call group.leave() when finished
}
group.notify(...

是的,调用 continue 是绝对必要的,因为您想避免继续执行循环体。

调用DispatchGroup.leave不会退出当前范围,您需要调用continue来实现。 leave 只会影响您对 DispatchGroup 所做的任何事情 - 因此随后的 notifywait 调用。

是的,continue 的编写方式很关键,因为您要确保 enter 调用有一个 leave 调用。由于您在 if 测试之前调用 enter,因此您必须 leavecontinue。如果您没有 continue 语句,它将继续执行已调用 leave 的后续代码。

但是,如果您只是调用 enter after if 语句,则不需要此 leave/continue 模式:

let group = DispatchGroup()

for object in objects {    
    if object.property == nil {
         continue
    }

    group.enter()

    // do something with object and call group.leave() when finished
}
group.notify(queue: .main) { ... }

然后我会更进一步,使用 continue 语句删除 if。只需在 for 循环中添加一个 where 子句,完全不需要 continue

let group = DispatchGroup()

for object in objects where object.property != nil {
    group.enter()

    // do something with object and call group.leave() when finished
}

group.notify(queue: .main) { ... }

这完成了您的原始代码片段所做的,但更加简洁。