AVSpeechSynthesizer didFinishSpeechUtterance not being called
<p>I am creating a picture bingo game.  I have a collection view with nine out of twelve images displayed.  I have created a for in loop to speak nine utterances, each utterance corresponding to one image displayed in the collection view.  The problem is that all nine utterances are spoken one after the other without pausing.  The utterances are "spit out" one after the other in the console immediately after I press the play button in the previous storyboard.  I need one utterance to be spoken and the loop to pause until the player taps the corresponding image.  Then I need the loop to resume and speak the next utterance until the player gets bingo.  The didFinishSpeechUtterance is not being called.  There is nothing in the console when tested in the simulator.  I have referred to "How can I make speech occur immediately for each iteration of a while loop in Swift?", and "An issue with AVSpeechSynthesizer, Any workarounds?"  I have also referred to "AVSpeechSynthesizer delegate method didStartSpeechUtterance not being called", but am still stumped.  </p>

<pre><code>class FarmViewController: UIViewController, UICollectionViewDataSource,        
    UICollectionViewDelegate, AVSpeechSynthesizerDelegate {


var arrayOfImages = ["pig", "horse", "dog", "cow", "duck", "cat", "sheep", "chicken", "rooster", "goat", "mouse", "donkey"]

var arrayOfSpeechUtterances = ["pig", "horse", "dog", "cow", "duck", "cat", "sheep", "chicken", "rooster", "goat", "mouse", "donkey"]

var arrayOfSU = [String]()

var speechSynthesizer = AVSpeechSynthesizer()

var images = ["pig", "horse", "dog", "cow", "duck", "cat", "sheep", "chicken", "rooster", "goat", "mouse", "donkey"]

var speechUtterances = [AVSpeechUtterance(string: "pig"), AVSpeechUtterance(string: "horse"), AVSpeechUtterance(string: "dog"), AVSpeechUtterance(string: "cow"), AVSpeechUtterance(string: "duck"), AVSpeechUtterance(string: "cat"), AVSpeechUtterance(string: "sheep"), AVSpeechUtterance(string: "chicken"), AVSpeechUtterance(string: "rooster"), AVSpeechUtterance(string: "goat"), AVSpeechUtterance(string: "mouse"), AVSpeechUtterance(string: "donkey")]

var dict = [AVSpeechUtterance(string: "pig"): "pig", AVSpeechUtterance(string: "horse"): "horse", AVSpeechUtterance (string: "dog"): "dog", AVSpeechUtterance(string: "cow"): "cow", AVSpeechUtterance(string: "duck"): "duck", AVSpeechUtterance(string: "cat"): "cat", AVSpeechUtterance(string: "sheep"): "sheep", AVSpeechUtterance(string:     "chicken"): "chicken", AVSpeechUtterance(string: "rooster"): "rooster", AVSpeechUtterance(string: "goat"): "goat", AVSpeechUtterance(string: "mouse"): "mouse", AVSpeechUtterance(string: "donkey"): "donkey"]

var currentName = ""

var queue = dispatch_queue_create("com.speechUtterances.serialqueue", DISPATCH_QUEUE_SERIAL)
</code></pre>

<p>override func viewDidLoad() {
    super.viewDidLoad()</p>

<pre><code>collectionView.delegate = self
collectionView.dataSource = self
speechSynthesizer.delegate = self
self.speechSynthesizer.delegate = self

arrayOfImages.shuffle()

for image in arrayOfImages [0...8] {
  arrayOfSU.append(image)
}

arrayOfSU.shuffle()

**dispatch_sync(queue) { () -&gt; Void in
for name in self.arrayOfSU {
let speechUtterances = AVSpeechUtterance (string: name)

    var beforeSpeechString = ""
    var beforeSpeech = AVSpeechUtterance (string: beforeSpeechString)
    self.speechSynthesizer.speakUtterance(beforeSpeech)
    print("before speech")**

    var currentName = AVSpeechUtterance (string: name)
    **print("current name")

    speechUtterance.rate = 0.50
    speechUtterance.pitchMultiplier = 2.0
    speechUtterance.volume = 1.0**

    **self.speechSynthesizer.speakUtterance(currentName)
    }
func speechSynthesizer(synthesizer: AVSpeechSynthesizer!,  didFinishSpeechUtterance utterance: AVSpeechUtterance!){
    print("finish")
    }**
}
}
</code></pre>