2015-06-11 14 views
6

Dla deklaracji w moim iPhone app var testAudio, Otrzymuję błąd tutajAVAudioPlayer już nie pracuje w Swift 2.0/Xcode 7 beta

„Zaproszenie można wyrzucić, ale błędy nie mogą być wyrzucane z inicjatora nieruchomości”

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

Stało się tak, gdy przeniosłem się do wersji beta Xcode 7.

Jak uzyskać funkcjonalność klipu audio w Swift 2.0?

Odpowiedz

21

Swift 2 ma zupełnie nowy system obsługi błędów, więcej informacji na ten temat można znaleźć tutaj: Swift 2 Error Handling.

W twoim przypadku konstruktor AVAudioPlayer może zgłosić błąd. Swift nie pozwoli ci używać metod, które powodują błędy w inicjalizatorach właściwości, ponieważ nie ma sposobu, aby je obsłużyć. Zamiast tego nie należy inicjować tej właściwości do czasu init kontrolera widoku.

var testAudio:AVAudioPlayer; 

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

Daje to szansę poradzenia sobie z błędami, które mogą pojawić się podczas tworzenia odtwarzacza audio i zatrzyma Xcode, dając ci ostrzeżenia.

+0

wierzę, że; nie jest tutaj potrzebny – cmario

+1

Jak uzyskać rzeczywisty błąd wygenerowany przez AVAudioPlayer? –

2

Jeśli znasz numer , błąd nie zostanie zwrócony, możesz spróbować wypróbować! wcześniej:

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

działa na mnie w Swift 2.2

ale nie zapomnij dodać fileName.mp3 do produkcji projektu phases-> Kopiuj Bundle Resources (prawy przycisk myszy na katalogu głównym projektu)

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

} 
Powiązane problemy