2015-06-11 34 views
6

Per la dichiarazione var testAudio nel mio iPhone app, sto ricevendo un errore quiAVAudioPlayer non funziona più a Swift 2.0/Xcode 7 beta

"Call può gettare, ma gli errori non può essere buttato fuori da un inizializzatore proprietà"

import UIKit 
import AVFoundation 
class ViewController: UIViewController { 
    var testAudio = AVAudioPlayer(contentsOfURL: NSURL (fileURLWithPath: NSBundle.mainBundle().pathForResource("testAudio", ofType: "wav")!), fileTypeHint:nil) 

Questo è accaduto quando mi sono trasferito alla Xcode 7 beta.

Come posso ottenere l'audio clip funzionante a Swift 2.0?

risposta

21

Swift 2 ha un nuovissimo sistema di gestione degli errori, puoi leggere ulteriori informazioni qui: Swift 2 Error Handling.

Nel proprio caso, il costruttore AVAudioPlayer può generare un errore. Swift non ti consente di usare metodi che generano errori negli inizializzatori delle proprietà perché non c'è modo di gestirli lì. Invece, non inizializzare la proprietà fino al init del controller della vista.

var testAudio:AVAudioPlayer; 

init() { 
    do { 
     try testAudio = AVAudioPlayer(contentsOfURL: NSURL (fileURLWithPath: NSBundle.mainBundle().pathForResource("testAudio", ofType: "wav")!), fileTypeHint:nil) 
    } catch { 
     //Handle the error 
    } 
} 

Questo ti dà la possibilità di gestire tutti gli errori che possono venire su durante la creazione del lettore audio e si ferma Xcode dando avvertimenti.

+0

credo che il; non è necessario qui – cmario

+1

Come posso ottenere un errore reale generato da AVAudioPlayer? –

2

Se si sa un errore non verrà restituito è possibile aggiungere provare! in anticipo:

testAudio = try! AVAudioPlayer(contentsOfURL: NSURL (fileURLWithPath: NSBundle.mainBundle().pathForResource 
1

lavora per me a Swift 2.2

ma non dimenticare di aggiungere il fileName.mp3 al progetto di costruzione phases-> Copia Bundle Risorse (tasto destro del mouse sulla radice del progetto)

var player = AVAudioPlayer() 

func music() 
{ 

    let url:NSURL = NSBundle.mainBundle().URLForResource("fileName", withExtension: "mp3")! 

    do 
    { 
     player = try AVAudioPlayer(contentsOfURL: url, fileTypeHint: nil) 
    } 
    catch let error as NSError { print(error.description) } 

    player.numberOfLoops = 1 
    player.prepareToPlay() 
    player.play() 

} 
Problemi correlati