- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 isSpeaking 属性来完成此操作。但是,它会在说出第一句话后返回 false,因此会过早触发所需的代码。
根据 Apple Dev Documentation 正在说话:
Returns true if the synthesizer is speaking or has utterances enqueued to speak, even if it is currently paused. Returns false if the synthesizer has finished speaking all utterances in its queue or if it has not yet been given an utterance to speak.
所以,我真的不明白为什么在排队的人多的时候说了一句就返回 false。
我也尝试过使用 didFinish utterance 方法,但它也会在第一次发言后触发代码。
有没有办法知道 AVSpeechSynthesizer 何时说完所有排队的话语,如下面的代码示例所示?我是编程新手,所以任何帮助实现这一点都会很棒。谢谢!
var i = 0
while i < array.count {
let utterance = "Let's talk about \(array[i])."
i += 1
speechSynthesizer.speak(utterance) }
最佳答案
实际上,目前(iOS 12、Swift 5.0)没有关于 AVSpeechSynthesizer 队列的可用信息,这让我们对其内容“视而不见”。
由于 AVSpeechSynthesizerDelegate
protocol methods,当您向说话者提供话语时,了解队列中内容的唯一方法是跟踪每个话语的开始和结束。 .
关于swift - 如何知道 AVSpeechSynthesizer 何时说完所有排队的话语。 swift 4.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53126981/
我知道这不是 Stack Overflow 的正确问题类型(请原谅我),但我花了几个小时试图让 Discourse 在我的机器上运行。它以前可以工作,但我升级到 Ruby 2.0 和 Rails 4,
我是一名优秀的程序员,十分优秀!