Ваш нынешний подход на самом деле не идеален для этого.
Для начала, AVSpeechSynthesizer предоставляет делегата, которого вы можете отслеживать за изменениями, в том числе когда он собирается выступить.
speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
Просто соблюдайте это и вызывайте функцию остановки.Закрытие не требуется, поскольку это синхронный вызов функции .
В итоге:
- Соответствует
AVSpeechSynthesizerDelegate
- Реализация
speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
- Когда вызывается указанная выше функция, вызовите ее
stopRecording()
function
Пример настройки делегата:
extension YourClassHere: AVSpeechSynthesizerDelegate {
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer,
willSpeakRangeOfSpeechString characterRange: NSRange,
utterance: AVSpeechUtterance) {
stopRecording()
}
}