2016-05-31 4 views
3

を終了したとき、私はちょうどそれを行う方法がわからないAVSpeechSynthesizerは、私はこことGoogleで検索して、人々がAVSpeechSynthesizerDelegateについて話しましたが、私はそれを使用することができませんでした...音声が

を検出します。

私は、音声が終わったときに正確に機能を実行したいと思います。

どうすればこの問題を解決できますか?デリゲートを使用する必要がある場合は、どうすればよいですか?

私はそのように試してみました:

func speechSynthesizer(synthesizer: AVSpeechSynthesizer, didFinishSpeechUtterance utterance: AVSpeechUtterance) { 
    falando = false 
    print("FINISHED") 
} 

音声が言われたと何も印刷されませんでしたが、これは、私が開発者のドキュメントで見つかった機能の一つでした。

クラスA:AVSpeechSynthesizerDelegateを入れようとしましたが、私はSpeech.delegate = self(スピーチはAVSpeechSynthesizerタイプのAの属性です)ですが、AはプロトコルNSObjectProtocolに準拠していません。

音声が終わるとすぐに(印刷物でも)何らかの機能を実行するにはどうすればよいですか?

ありがとうございました!

答えて

9

A does not conform to protocol NSObjectProtocolは、クラスがNSObjectから継承しなければならないことを意味します。詳細については、hereを参照してください。

あなたのコードをどのように構造化したのか分かりませんが、この小さな例は私にとってはうまくいくようです。 AVSpeechSynthesizerを保持している第1デッド単純なクラス:私はここ(init方法で)デリゲートを設定し、それが幸せなコンパイラを保つためにNSObjectから継承しなければならないことに気づく

class Speaker: NSObject { 
    let synth = AVSpeechSynthesizer() 

    override init() { 
     super.init() 
     synth.delegate = self 
    } 

    func speak(string: String) { 
     let utterance = AVSpeechUtterance(string: string) 
     synth.speakUtterance(utterance) 
    } 
} 

お知らせ

(非常に重要!)

そして、実際のデリゲートメソッド:

extension Speaker: AVSpeechSynthesizerDelegate { 
    func speechSynthesizer(synthesizer: AVSpeechSynthesizer, didFinishSpeechUtterance utterance: AVSpeechUtterance) { 
     print("all done") 
    } 
} 

そして最後に、私はそうのように、ここではそのクラスを使用することができます。

が話して停止したとき

で私に報酬を与える10

class ViewController: UIViewController { 
    let speaker = Speaker() 

    @IBAction func buttonTapped(sender: UIButton) { 
     speaker.speak("Hello world") 
    } 
} 

はすべて私のコンソールに

を行って。

あなたが助けてくれると助かります

+0

それは私の問題を解決しました、ありがとう! – Daniel

+0

よろしくお願いいたします。うれしいことです – pbodsk

関連する問題

 関連する問題