(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】:
AVAudioEngine
的inputNode
属性不是可选的。当第一次访问 inputNode 时,音频引擎会按需创建一个单例。它不能为零,因此守卫没有意义。
所以,只需移除防护并按原样使用audioEngine.inputNode
。不能是nil
。
您仍然必须确保inputNode
在使用前已连接到某物:
检查输入节点的输入格式(具体是硬件 格式)用于非零采样率和通道数,以查看是否输入 已启用。
(来自 Apple 的文档)
【讨论】:
频率或频道数为零时该怎么办?我遇到过几次这种情况,只有设备重启才能解决它... 谁能解决@shelll 提到的问题? 值得注意的是,在 ios 11 之前它实际上是可选的。以上是关于(Swift) 条件绑定的初始化程序必须具有 Optional 类型,而不是 'AVAudioInputNode'的主要内容,如果未能解决你的问题,请参考以下文章
条件绑定的初始化程序必须具有可选类型,而不是 swift 3 中的“字符串”
条件绑定的初始化程序必须具有可选类型,而不是“字符串” - ios - swift
条件绑定的初始化程序必须具有可选类型,而不是“Substring.SubSequence”(又名“Substring”) - swift [重复]