viewDidAppear()内でUIAlertControllを使用したアラート画面を表示し、ボタンが押されるまで待つようしたいです。(iOS11)
下記の処理を実装しましたが、アラート画面が表示されず画面のタップもできない状態になります。

非同期や遅延実行によるアラート画面呼び出しは問題なくアラート画面が表示されます。
同期をとる何かいい手段はないでしょうか?

override func viewDidAppear(_ animated: Bool) {

    super.viewDidAppear(animated)

    var doneloop = false

    let alert = UIAlertController(title:"タイトル", message: "メッセージ", preferredStyle: UIAlertControllerStyle.alert)

    let action1 = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: {
        (action: UIAlertAction!) in
        print("push OK button")

        doneloop = true // Runloopを抜ける
    })

    alert.addAction(action1)

    self.present(alert, animated: false, completion: nil)

    // ボタンがクリックされるまで待機
    while !doneloop {
        RunLoop.current.run(until: Date(timeIntervalSinceNow: 0.1))
    }

    alert.dismiss(animated: false, completion: nil)
}