AVAudioPlayer不再适用于Swift 2.0 / Xcode 7 beta

时间:2015-06-11 16:53:52

标签: ios xcode beta xcode7

对于我的iPhone应用中的var testAudio声明,我在此处收到错误

“调用可以抛出,但不能从属性初始化程序中抛出错误”

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

当我转移到Xcode 7测试版时,就发生了这种情况。

如何在Swift 2.0中使用此音频剪辑?

3 个答案:

答案 0 :(得分:21)

Swift 2有一个全新的错误处理系统,你可以在这里阅读更多相关信息:Swift 2 Error Handling

在您的情况下,AVAudioPlayer构造函数可能会抛出错误。 Swift不会让你使用在属性初始化器中抛出错误的方法,因为那里没有办法处理它们。相反,请不要将属性初始化,直到视图控制器的init

var testAudio:AVAudioPlayer;

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

这使您有机会处理创建音频播放器时可能出现的任何错误,并会阻止Xcode向您发出警告。

答案 1 :(得分:2)

如果您知道,则无法返回错误,您可以添加试用!事先:

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

答案 2 :(得分:1)

在Swift 2.2中为我工作

但是不要忘记将fileName.mp3添加到项目构建阶段 - >复制捆绑资源(右键单击项目根目录)

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

}