У меня вопрос почему.
Обратите внимание, как runModal
возвращает результат модального окна как NSModalResponse
. Код после строки alert.runModal()
должен иметь доступ к возвращаемому значению, например,
let result = alert.runModal()
print(result)
Если код после runModal
был запущен , как только отображается модальное окно, что бы было result
? Пользователь еще не нажал ни одной кнопки в модальном окне, поэтому никто не знает!
Вот почему, когда вызывается runModal
, выполнение кода просто приостанавливается там, на этой строке, пока пользователь не выберет одну из вариантов. runModal
- это синхронный и блокировка .
Сравните это с alert.beginSheetModal
, которое принимает закрытие completionHandler
, и модальный ответ не возвращается, но перешел на completionHandler
. Это позволяет коду после вызова продолжать работать, пока отображается модальное окно, потому что код после вызова не имеет доступа к модальному ответу. Только код в completionHandler
работает. beginSheetModal
- это асинхронный .
Если у вас есть что-то, что вы хотите распечатать, как только появится предупреждение, напишите это перед вызовом runModal
и (необязательно) оберните его в вызов DispatchQueue.asyncAfter
/ DispatchQueue.async
, чтобы ваш print
был асинхронным.
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) {
print("Hello")
}
alert.runModal()