Swift-离开dispatchGroup时是否有必要调用Continue

问题描述

我有一组对象必须使用>>> datetime_timedelta datetime.timedelta(days=-1,seconds=83700) for-loop进行迭代。将群组留在dispatchGroup内时,是否有必要呼叫for-loop

continue

解决方法

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

调用DispatchGroup.leave不会退出当前范围,您需要调用continue才能实现。 leave仅影响您对DispatchGroup所做的任何操作-因此,随后的notifywait调用。

,

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

但是,如果您只是在leave语句之后调用continue ,则不需要这种enter / if模式:

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) { ... }

然后,我将更进一步,并使用if语句删除该continue。只需在where循环中添加for子句,根本就不需要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) { ... }

这可以完成您原始代码段的工作,但是更加简洁。