Swift - необходимо вызывать continue при выходе из группы 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(...
2 ответа
Да, позвонить обязательно
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) { ... }
Это выполняет то, что делал ваш исходный фрагмент кода, но является более кратким.