2017-09-24 6 views
3

Je suis en train de créer un discours en texte fonction et je reçois l'erreur:(Swift) Initializer pour la liaison conditionnelle doit avoir le type en option, non 'AVAudioInputNode'

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

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

J'ai exactement le problème inverse, dans mon cas, le 'inputNode' est facultatif même si la documentation indique le contraire. – shelll

+0

Comment avez-vous réalisé que ce n'est pas nul? Utilisez-vous Swift 4? Quel cadre "AV" reliez-vous à votre projet? – shelll

+0

ceci est directement à partir de l'exemple de code d'Apple et il ne semble pas fonctionner – user798719

Répondre

0

AVAudioEngine ' s inputNode La propriété n'est pas facultative. Le moteur audio crée un singleton à la demande lors de l'accès initial à inputNode. Ça ne peut pas être nul et à cause de ça, le garde n'a pas de sens. Donc, il suffit de retirer le protecteur et d'utiliser audioEngine.inputNode tel quel. Il ne peut pas être nil.

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

Check the input format of input node (specifically, the hardware format) for a non-zero sample rate and channel count to see if input is enabled.

(de la documentation d'Apple)

+0

Que devons-nous faire lorsque la fréquence ou le nombre de canaux sont zéro? J'ai rencontré cette situation à quelques reprises et seul le redémarrage de l'appareil l'a corrigé ... – shelll

+0

Quelqu'un a-t-il réussi à résoudre le problème mentionné par @shelll? – Tarun