web-dev-qa-db-fra.com

(Swift) L'initialiseur pour la liaison conditionnelle doit avoir un type facultatif, pas 'AVAudioInputNode'

J'essaie de créer une fonction de synthèse vocale et j'obtiens l'erreur:

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

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

La propriété AVAudioEngine de inputNode n'est pas facultative. Le moteur audio crée un singleton à la demande lors du premier accès à inputNode. Cela ne peut pas être nul et à cause de cela, le gardien n'a pas de sens.

Donc, retirez simplement le garde et utilisez audioEngine.inputNode tel quel. Il ne peut pas s'agir de nil.

Vous devez toujours vous assurer que le inputNode est connecté à quelque chose avant de l'utiliser:

Vérifiez le format d'entrée du nœud d'entrée (en particulier, le format matériel) pour une fréquence d'échantillonnage non nulle et un nombre de canaux pour voir si l'entrée est activée.

(à partir de la documentation d'Apple)

12
joern