Es scheint auf einigen Spielplätzen Probleme mit dem Abspielen von Audio. Siehe dieses Thema anschauen:
Playing a sound in a Swift Playground
Allerdings konnte ich einige Änderungen an Ihrem Code machen und damit es funktioniert. Hier ist mein Code:
class Morse:NSObject, AVAudioPlayerDelegate {
private var message = ""
private var dotSound:AVAudioPlayer!
private var dashSound:AVAudioPlayer!
private let dash = Character("-")
private let dot = Character(".")
private var index:String.Index!
init(message:String) {
super.init()
do {
if let url = Bundle.main.url(forResource:"beep_short", withExtension:"mp3") {
self.dotSound = try AVAudioPlayer(contentsOf:url)
self.dotSound.delegate = self
self.dotSound.prepareToPlay()
}
} catch {
NSLog("Error loading dot audio!")
}
do {
if let url = Bundle.main.url(forResource:"beep_long", withExtension:"mp3") {
self.dashSound = try AVAudioPlayer(contentsOf:url)
self.dashSound.delegate = self
self.dashSound.prepareToPlay()
}
} catch {
NSLog("Error loading dash audio!")
}
self.message = message
self.index = message.startIndex
}
func playCharacter() {
let character = message.characters[index]
NSLog("Character: \(character)")
if character == dash {
dashSound.play()
} else if character == dot {
dotSound.play()
}
}
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
NSLog("Finished playing")
if index != message.endIndex {
self.index = message.index(after:index)
playCharacter()
}
}
}
let m = Morse(message:"...---")
m.playCharacter()
PlaygroundPage.current.needsIndefiniteExecution = true
Ich musste indefinite Ausführung aktivieren, um den Code überhaupt ausführen zu lassen. Außerdem hatte ich einige Probleme mit der zweiten Audiodatei, die geladen wurde, aber ich untersuchte nicht weiter, um zu sehen, ob es ein Problem mit meiner Testdatei oder etwas anderem war, da es meistens funktionierte.
Es ist verwirrend wenn Sie Kommentare als offizielle Antwort posten. Diese "Antwort" von Ihnen sollte ein Kommentar zu Fahims Antwort sein und Sie sollten Ihre Frage bearbeiten, um diesen aktualisierten Code anzuzeigen. –