6

对于var testAudio我的 iPhone 应用程序中的声明,我在这里收到一个错误

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

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 中运行?

4

3 回答 3

21

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

在您的情况下,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 给您警告。

于 2015-06-11T17:17:02.437 回答
2

如果您知道不会返回错误,您可以添加尝试!预先:

testAudio = try! AVAudioPlayer(contentsOfURL: NSURL (fileURLWithPath: NSBundle.mainBundle().pathForResource
于 2016-01-14T17:12:34.053 回答
1

在 Swift 2.2 中为我工作

但是不要忘记将fileName.mp3添加到项目Build阶段->Copy Bundle Resources(右键单击项目根目录)

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

}
于 2016-05-08T20:13:03.527 回答