2015-09-28 2 views
1

Я пытаюсь воспроизвести звук с помощью Swift 2.0 Если я напишу 'try' без '!' Я получил ошибку «Ошибки, отброшенные отсюда, не обрабатываются» И AVAudioPlayer не является факультативным, почему запрос Xcode «попробуйте!» Если я напишу 'try!' мое приложение аварии «неожиданно нашли ноль в то время как разворачивание необязательное значение»AVFoundation play sound swift 2

class TouchViewController: UIViewController { 
var soundPath:NSURL? 
................... 
//Play Bipsound 
     do { soundPath = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Bipsound", ofType: "wav")!) 
      var sound = try! AVAudioPlayer(contentsOfURL: soundPath!, fileTypeHint: nil) 
      sound.prepareToPlay() 
      sound.play() } 

ответ

3
var soundPath:NSURL? 

    if let path = NSBundle.mainBundle().pathForResource("Bipsound", ofType: "wav") { 
     soundPath = NSURL(fileURLWithPath: path) 
     do { 
      let sound = try AVAudioPlayer(contentsOfURL: soundPath!, fileTypeHint:nil) 
      sound.prepareToPlay() 
      sound.play() 
     } catch { 
      //Handle the error 
     } 
    } 
3

притворитесь, что вы никогда не видели ! сила-разворачивания оператора в Swift до и прекратить использовать его полностью. Это в основном оператор «Crash if this contains содержит nil». Используйте «if let» стиль необязательного привязки или try/catch, как указано в @LLooggaann в его отличном ответе. (проголосовало)

+0

Согласен. Я использовал его там на 'soundPath', но только потому, что я на 100% знаю, что он безопасен из вышеприведенной строки, и я предполагаю, что он объявлен как необязательный по причине. Всегда мог добавить один дополнительный «если позволил» быть супербезопасным. – LLooggaann