(Swift) 条件绑定的初始化程序必须具有 Optional 类型,而不是 'AVAudioInputNode'

Posted

技术标签:

【中文标题】(Swift) 条件绑定的初始化程序必须具有 Optional 类型,而不是 \'AVAudioInputNode\'【英文标题】:(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 的示例代码,它似乎不起作用 【参考方案1】:

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

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

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

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

(来自 Apple 的文档)

【讨论】:

频率或频道数为零时该怎么办?我遇到过几次这种情况,只有设备重启才能解决它... 谁能解决@shelll 提到的问题? 值得注意的是,在 ios 11 之前它实际上是可选的。

以上是关于(Swift) 条件绑定的初始化程序必须具有 Optional 类型,而不是 'AVAudioInputNode'的主要内容,如果未能解决你的问题,请参考以下文章

条件绑定的初始化程序必须具有可选类型,而不是 swift 3 中的“字符串”

条件绑定的初始化程序必须具有可选类型,而不是“字符串” - ios - swift

条件绑定的初始化程序必须具有可选类型,而不是“Substring.SubSequence”(又名“Substring”) - swift [重复]

快速获取条件绑定的错误初始化程序必须具有可选类型,为啥?

条件绑定的初始化程序必须具有可选类型,而不是“UIView”

条件绑定的初始化程序必须具有可选类型,而不是“字符串”