Я начинающий программист, у которого возникли проблемы с синхронизацией вызовов функций.Я хотел бы объяснить, почему это происходит, и как это исправить.Проблема возникает в сегменте кода, который запускается, когда одно всплывающее окно закрывается, и я хочу сначала открыть другое всплывающее окно, а затем после нажатия кнопки в новом всплывающем окне, я хочу, чтобы программа сделала что-то дополнительно в главном контроллере представления.Вот код (кто-то предложил использовать DispatchQue, но он, похоже, ничего не делает):
@objc func onPopupClosed() {
print("first")
DispatchQueue.main.async {
if let vc = self.storyboard?.instantiateViewController (withIdentifier:
"P2CompetitionPopUpId") as? P2_Competition_Pop_Up
{
vc.modalPresentationStyle = .overCurrentContext
self.present(vc, animated: true, completion: nil)
} else {
print("error creating P2_Competion_Pop_Up")
}
}
print ("third")
}
И P2_Competition_Pop_Up выглядит следующим образом:
class P2_Competition_Pop_Up: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//print("Second")
}
@IBAction func Slot1(_ sender: Any) {
//some code
dismiss(animated: true, completion: nil)
}
}
Я хочу, чтобы эта программа получиласьв выводе «первый», «второй», «третий» (и печатать «третий» только после нажатия кнопки во всплывающем окне).Вместо этого он дает мне «первый», «третий», «второй».Зачем?И как мне это исправить?Является ли использование DispatchQue правильным способом или есть другой?
пс.оператор "print (" third ")" действительно является модификацией того, как выглядит основной вид.Я просто использовал это утверждение, чтобы подчеркнуть сложность порядка и упростить иллюстрацию.