首页 > 解决方案 > 委托方法:AVSpeechSynthesizerDelegate 的“willSpeakRangeOfSpeechString”未被调用

问题描述

在我的应用程序中,我希望 Siri 读出文本。这工作正常。但我也想使用AVSpeechSynthesizerDelegate. 这两种方法被正确调用,但willSpeakRangeOfSpeechString不是:

这就是我生成AVSpeechSynthesizer. 这是在didSelectItemAt我的UICollectionViewController

let utterance = AVSpeechUtterance(string: "testString")
utterance.rate = 0.5
utterance.volume = 1

utterance.preUtteranceDelay = 0.0
utterance.postUtteranceDelay = 0.0

self.synthesizer.speak(utterance)

AVSpeechSynthesizer声明在类的顶部,委托设置在viewDidLoad

override func viewDidLoad() {
   super.viewDidLoad()
    self.synthesizer.delegate = self
}

为什么调用此委托方法?

编辑:

当然我已经实现AVSpeechSynthesizerDelegate并导入了 AVFoundation。

标签: swiftdelegatesavspeechsynthesizer

解决方案


我刚刚遇到这个或类似的问题。我在调用它的 speak 函数后设置了 AVSpeechSynthesizer 委托。这导致 willSpeakRangeOfSpeechString 不被调用。在调用 speak 函数之前分配委托修复了这个问题。


推荐阅读