【问题标题】:(Swift) Initializer for conditional binding must have Optional type, not 'AVAudioInputNode'(Swift) 条件绑定的初始化程序必须具有 Optional 类型,而不是 'AVAudioInputNode'
【发布时间】:2018-03-05 15:58:51
【问题描述】:

我正在尝试创建语音转文本功能,但出现错误:

Initializer for conditional binding must have Optional type, not 'AVAudioInputNode'

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

【问题讨论】:

  • 我有完全相反的问题,在我的情况下,inputNode 是可选的,即使文档另有说明。
  • 你是如何实现它不为零的?你使用 Swift 4 吗?您将哪个“AV”框架链接到您的项目中?
  • 这是直接来自 Apple 的示例代码,它似乎不起作用

标签: xcode conditional optional speech avaudioengine


【解决方案1】:

AVAudioEngineinputNode 属性不是可选的。当第一次访问 inputNode 时,音频引擎会按需创建一个单例。它不能为零,因此守卫没有意义。

所以,只需移除防护并按原样使用audioEngine.inputNode。不能是nil

您仍然必须确保inputNode 在使用前已连接到某物:

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

(来自 Apple 的文档)

【讨论】:

  • 频率或频道数为零时该怎么办?我遇到过几次这种情况,只有设备重启才能解决它...
  • 谁能解决@shelll 提到的问题?
  • 值得注意的是,在 iOS 11 之前它实际上是可选的。
猜你喜欢
  • 1970-01-01
  • 2019-04-17
  • 2015-10-19
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2021-04-26
相关资源
最近更新 更多