#swift #dispatch-queue #dispatchgroup
#swift #отправка-очередь #dispatchgroup
Вопрос:
Мне нужно выполнять некоторые методы один за другим, не прерывая, в отдельном потоке, как у меня в моем классе
fileprivate var queue = DispatchQueue(label: "ProgressHUD", qos: .userInteractive)
и когда мне нужно показать / скрыть, я делаю что-то вроде этого
queue.sync {
__hide()
}
или
queue.sync {
__show()
}
в этих __%%()
методах мне нужно выполнить некоторые действия с пользовательским интерфейсом в основном потоке, и мне нужно выполнять все действия из —show / —hide одно за другим, не прерывая. Поэтому во внутреннем я использую
private func __show()
{
let g = DispatchGroup()
g.enter()
DispatchQueue.main.async {
print("go?")
self.doMyAction1()
self.doMyAction2()
self.doMyAction3()
g.leave()
}
g.wait()
}
но приложение всегда зависает в сети g.wait()
, не вызывает main.async
и не печатает go?
. Что я делаю не так !?
Ответ №1:
func dispatchGroup() -> String {
var message = ""
let group = DispatchGroup()
group.enter()
DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() 5) {
message = "Hiii Friends"
group.leave()
}
group.wait()
return message
}
Комментарии:
1. Я уже читал эту тему перед своим сообщением (где вы скопировали вставленный текст), но не понимаю, что я делаю не так?