Swift -离开dispatchGroup时是否需要调用continue
Swift -is it necessary to call continue when leaving a dispatchGroup
我有一组对象,我必须使用 for-loop
和 DispatchGroup
循环访问这些对象。在 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
所做的任何事情 - 因此随后的 notify
或 wait
调用。
是的,continue
的编写方式很关键,因为您要确保 enter
调用有一个 leave
调用。由于您在 if
测试之前调用 enter
,因此您必须 leave
和 continue
。如果您没有 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) { ... }
这完成了您的原始代码片段所做的,但更加简洁。
我有一组对象,我必须使用 for-loop
和 DispatchGroup
循环访问这些对象。在 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
所做的任何事情 - 因此随后的 notify
或 wait
调用。
是的,continue
的编写方式很关键,因为您要确保 enter
调用有一个 leave
调用。由于您在 if
测试之前调用 enter
,因此您必须 leave
和 continue
。如果您没有 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) { ... }
这完成了您的原始代码片段所做的,但更加简洁。