使用 swift 2.0 代码播放嵌入的声音 Xcode 7.1 IOS 9.1

Playing an embedded sound using swift 2.0 code Xcode 7.1 IOS 9.1

主要复制并粘贴了这段代码。编译并运行,但不播放任何内容。使用 Xcode 7.1 和 IOS 9.1。我错过了什么...将声音文件加载到主程序和 AVAssets...

import UIKit
import AVFoundation

class ViewController: UIViewController {

   var buttonBeep : AVAudioPlayer?

   override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    buttonBeep = setupAudioPlayerWithFile("hotel_transylvania2", type:"mp3")
    //buttonBeep?.volume = 0.9
    buttonBeep?.play()
   }

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer?  {
    //1
    let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
    let url = NSURL.fileURLWithPath(path!)

    //2
    var audioPlayer:AVAudioPlayer?

    // 3
    do {
        try audioPlayer? = AVAudioPlayer(contentsOfURL: url)
    } catch {
        print("Player not available")
    }

    return audioPlayer
}



}

你把这条线弄反了:

try audioPlayer? = AVAudioPlayer(contentsOfURL: url)

应该是:

audioPlayer = try AVAudioPlayer(contentsOfURL: url)

旁注:这里不需要与 NSString 之间的转换,只需使用 String - 你不应该强制解包 NSBundle 的结果:

func setupAudioPlayerWithFile(file:String, type:String) -> AVAudioPlayer?  {
    //1
    guard let path = NSBundle.mainBundle().pathForResource(file, ofType: type) else {
        return nil
    }
    let url = NSURL.fileURLWithPath(path)

    //2
    var audioPlayer:AVAudioPlayer?

    // 3
    do {
        audioPlayer = try AVAudioPlayer(contentsOfURL: url)
    } catch {
        print("Player not available")
    }

    return audioPlayer
}