2016-04-24 8 views
0

Ich habe diese Datei und möchte diese Datei in einer anderen Klasse verwenden, aber das funktioniert nicht. Ich nehme an, dass dies daran liegt, dass ich die AVAudioPlayer in dieser Datei nicht initialisiert habe, also ging ich damit um, aber eine Nachricht erschien, "Call can throw, but it is not marked with 'try' and the error is not handled" Meine Implementierung war nicht erfolgreich. Ich habe keine Ahnung, wie ich damit umgehen soll. Könnten Sie auf die Fehler bei der Initialisierung hinweisen und mir einen Code zur Verfügung stellen, der funktioniert? Danke im Voraus.So initialisieren Sie AVAudioPlayer in Swift

class SoundManager: AVAudioPlayer { 
var _Sound: AVAudioPlayer! 

override init() { 
    let url = NSBundle.mainBundle().URLForResource("rain", withExtension: "wav") 
    super.init(contentsOfURL: url!) 
} 

func playSound() { 


    if (url == nil) { 
     print("Could not find the file \(_Sound)") 
    } 

    do { 
     _Sound = try AVAudioPlayer(contentsOfURL: url!, fileTypeHint: nil) 

    } 
    catch let error as NSError { print(error.debugDescription) 

    } 
    if _Sound == nil { 
     print("Could not create audio player") 
    } 
    _Sound.prepareToPlay() 
    _Sound.numberOfLoops = -1 
    _Sound.play() 
} 

} 

Antwort

1

Ich empfehle, diesen Weg init Sie Manager zu verwenden, muss es keine Unterklasse von AVAudioPlayer sein.

 
class SoundManager { 
    var _Sound: AVAudioPlayer! 
    var url: NSURL? 

    /** 
    init with file name 

    - parameter fileName: fileName 

    - returns: SoundManager 
    */ 
    init(fileName: String) { 
     url = NSBundle.mainBundle().URLForResource(fileName, withExtension: "wav") 
    } 

    func playSound() { 
     if (url == nil) { 
      print("Could not find the file \(_Sound)") 
     } 

     do { 
      _Sound = try AVAudioPlayer(contentsOfURL: url!, fileTypeHint: nil) 

     } 
     catch let error as NSError { print(error.debugDescription) 

     } 
     if _Sound == nil { 
      print("Could not create audio player") 
     } 
     _Sound.prepareToPlay() 
     _Sound.numberOfLoops = -1 
     _Sound.play() 
    } 
} 

Verwenden let manager = SoundManager(fileName: "hello") manager.playSound()

+0

Arbeitete !! Ich dachte AVAuiodPlayer als Unterklasse zu implementieren war notwendig. Ich bin gespannt auf welche Situation, sollte ich es dann benutzen? – bagels

+0

@ryohei Wenn Sie diesen Manager 'as' AVAudioPlayer verwenden möchten, verwenden Sie die Unterklasse. Es wird die Eigenschaft und Funktionen der Oberklasse inihrit. Wenn es um Manager-Klasse geht, bevorzuge ich, Klasse ohne Unterklasse zu erstellen, und geben Sie eine Instanz von AVAudioPlayer, wie Sie es in Zeile 'var _Sound: AVAudioPlayer!' Getan haben. Vergessen Sie nicht, meine Antwort als nützlich zu markieren ~~ – BrikerMan

+0

Oh, ich verstehe. Ich bin glücklich, das zu lösen! Danke für deine Antwort :) – bagels

Verwandte Themen