(Swift)用于条件绑定的初始化器必须具有可选类型,而不是“AVAudioInputNode”

16

我正在尝试创建一个语音转文字的功能,但是出现了以下错误:

条件绑定的初始化器必须具有可选类型,而不是'AVAudioInputNode'

guard let inputNode = audioEngine.inputNode else {
        fatalError("Audio engine has no input node")
    }

我恰好有相反的问题,在我的情况下,即使文档说明不是这样,inputNode也是可选的。 - shelll
你是如何实现它不为 nil 的?你使用 Swift 4 吗?你将哪个“AV”框架链接到你的项目中? - shelll
这段代码直接来自于苹果的示例代码,但似乎无法运行。 - user798719
1个回答

14

AVAudioEngineinputNode 属性不是可选类型。当首次访问 `inputNode` 时,音频引擎会按需创建一个单例。它不能为 `nil`,因此使用 `guard` 是没有意义的。

因此,只需删除 `guard` 并像原来一样使用 `audioEngine.inputNode` 即可。它不能为 `nil`。

在使用之前,仍需确保 `inputNode` 已连接到某个输入设备:

  

检查输入节点(特别是硬件格式)的输入格式是否具有非零采样率和通道数,以查看输入是否已启用。

(摘自 Apple 的文档)


当频率或通道计数为零时,我们应该怎么办?我遇到过这种情况几次,只有设备重启才能解决它... - shelll
有人能够解决@shelll提到的问题吗? - Tarun
1
值得注意的是,在iOS 11之前,它实际上是可选的。 - shim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接