2016-05-31 80 views
3

AVSpeechSynthesizer檢測我只是不知道該怎麼辦呢?當演講結束後

我這裏尋找,並在谷歌和讓人津津樂道的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:(!非常重要)

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) 
    } 
} 

請注意,我這裏設置委託(在init方法),請注意,必須從NSObject繼承使編譯器高興

然後實際的委託方法:

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

最後,我在這裏可以使用類,如下所示:

class ViewController: UIViewController { 
    let speaker = Speaker() 

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

獎勵我所有當AVSpeechSynthesizer已經停止在講我的控制檯進行

希望對你有所幫助

+0

它確實有幫助,它解決了我的問題,謝謝! – Daniel

+0

不客氣,很高興你有它的工作 – pbodsk