问题描述
我有一组对象必须使用>>> datetime_timedelta
datetime.timedelta(days=-1,seconds=83700)
和for-loop
进行迭代。将群组留在dispatchGroup
内时,是否有必要呼叫for-loop
?
continue
解决方法
是的,绝对有必要调用continue
,因为您要避免继续执行循环主体。
调用DispatchGroup.leave
不会退出当前范围,您需要调用continue
才能实现。 leave
仅影响您对DispatchGroup
所做的任何操作-因此,随后的notify
或wait
调用。
是的,写此方法的方式,continue
是至关重要的,因为您要确保enter
调用只有一个leave
调用。由于您要在enter
测试之前致电if
,因此您必须leave
和continue
。如果您没有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) { ... }
这可以完成您原始代码段的工作,但是更加简洁。