wait(for:timeout:)
из XCTestCase
не похож на GCD-группу / семафор wait
функций, с которыми вы, вероятно, знакомы.
Когда вы звоните wait(for:timeout:)
, очень как и вызовы GCD wait
, он не будет возвращаться до тех пор, пока не истечет время ожидания или не будут решены ожидания. Но, в случае XCTestCase
и в отличие от вариаций GCD, внутри wait(for:timeout:)
он зацикливается, многократно вызывая run(mode:before:)
до тех пор, пока ожидания не будут разрешены или не истечет время ожидания. Это означает, что хотя testX
не будет продолжаться до тех пор, пока не будет удовлетворен wait
, вызовы run(mode:before:)
позволят запуску l oop продолжать обрабатывать события (включая все, что было отправлено в эту очередь, включая закрытие обработчика завершения). ). Следовательно, нет тупика.
Вероятно, нет нужды говорить, что это особенность XCTestCase
, но это не шаблон для использования в вашем собственном коде.
Независимо от получения дополнительной информации о том, как запускать циклы см. Руководство по программированию потоков: циклы выполнения .