如何在Swift中初始化AVAudioPlayer

如何在Swift中初始化AVAudioPlayer,swift,initialization,avaudioplayer,Swift,Initialization,Avaudioplayer,我有这个文件,想在另一个类中使用这个文件,但这不起作用。我假设这是因为我没有初始化这个文件中的AVAudioPlayer,所以我解决了这个问题,但是出现了一条消息,说“调用可以抛出,但它没有标记为'try',错误没有被处理”我的实现没有成功。我不知道怎么处理这件事。你能指出初始化的错误并给我提供一些有效的代码吗。提前谢谢 class SoundManager: AVAudioPlayer { var _Sound: AVAudioPlayer! override init() { le

我有这个文件,想在另一个类中使用这个文件,但这不起作用。我假设这是因为我没有初始化这个文件中的
AVAudioPlayer
,所以我解决了这个问题,但是出现了一条消息,说
“调用可以抛出,但它没有标记为'try',错误没有被处理”
我的实现没有成功。我不知道怎么处理这件事。你能指出初始化的错误并给我提供一些有效的代码吗。提前谢谢

class SoundManager: AVAudioPlayer {
var _Sound: AVAudioPlayer!

override init() {
    let url = NSBundle.mainBundle().URLForResource("rain", withExtension: "wav")
    super.init(contentsOfURL: url!)
}

func playSound() {


    if (url == nil) {
        print("Could not find the file \(_Sound)")
    }

    do {
        _Sound = try AVAudioPlayer(contentsOfURL: url!, fileTypeHint: nil)

    }
    catch let error as NSError { print(error.debugDescription)

    }
    if _Sound == nil {
        print("Could not create audio player")
    }
    _Sound.prepareToPlay()
    _Sound.numberOfLoops = -1
    _Sound.play()
}

}

我建议在管理器中使用这种方式,它不必是AVAudioPlayer的子类

class SoundManager { var _Sound: AVAudioPlayer! var url: NSURL? /** init with file name - parameter fileName: fileName - returns: SoundManager */ init(fileName: String) { url = NSBundle.mainBundle().URLForResource(fileName, withExtension: "wav") } func playSound() { if (url == nil) { print("Could not find the file \(_Sound)") } do { _Sound = try AVAudioPlayer(contentsOfURL: url!, fileTypeHint: nil) } catch let error as NSError { print(error.debugDescription) } if _Sound == nil { print("Could not create audio player") } _Sound.prepareToPlay() _Sound.numberOfLoops = -1 _Sound.play() } } 班级音响管理员{ var_Sound:AVAudioPlayer! var-url:NSURL? /** 具有文件名的init -参数文件名:fileName -返回:SoundManager */ init(文件名:String){ url=NSBundle.mainBundle().URLForResource(文件名,扩展名:“wav”) } func playSound(){ 如果(url==nil){ 打印(“找不到文件\(\u声音)”) } 做{ _Sound=尝试AVAudioPlayer(contentsOfURL:url!,fileTypeHint:nil) } 将let错误捕获为NSError{print(error.debugDescription) } 如果_Sound==nil{ 打印(“无法创建音频播放器”) } _准备播放 _Sound.numberOfLoops=-1 _播放 } } 使用

let manager=SoundManager(文件名:“hello”)
经理:playSound()

我建议在管理器中使用这种方式,它不必是AVAudioPlayer的子类

class SoundManager { var _Sound: AVAudioPlayer! var url: NSURL? /** init with file name - parameter fileName: fileName - returns: SoundManager */ init(fileName: String) { url = NSBundle.mainBundle().URLForResource(fileName, withExtension: "wav") } func playSound() { if (url == nil) { print("Could not find the file \(_Sound)") } do { _Sound = try AVAudioPlayer(contentsOfURL: url!, fileTypeHint: nil) } catch let error as NSError { print(error.debugDescription) } if _Sound == nil { print("Could not create audio player") } _Sound.prepareToPlay() _Sound.numberOfLoops = -1 _Sound.play() } } 班级音响管理员{ var_Sound:AVAudioPlayer! var-url:NSURL? /** 具有文件名的init -参数文件名:fileName -返回:SoundManager */ init(文件名:String){ url=NSBundle.mainBundle().URLForResource(文件名,扩展名:“wav”) } func playSound(){ 如果(url==nil){ 打印(“找不到文件\(\u声音)”) } 做{ _Sound=尝试AVAudioPlayer(contentsOfURL:url!,fileTypeHint:nil) } 将let错误捕获为NSError{print(error.debugDescription) } 如果_Sound==nil{ 打印(“无法创建音频播放器”) } _准备播放 _Sound.numberOfLoops=-1 _播放 } } 使用

let manager=SoundManager(文件名:“hello”)
经理:playSound()

工作正常!!我认为将AVAuiodPlayer实现为一个子类是必要的。我很好奇在什么情况下,我应该使用它吗?@ryohei当你想将这个管理器
用作
AVAudioPlayer时,就使用subclass。它将简化超类的性质和功能。说到管理器类,我更喜欢创建没有子类的类,并给它一个AVAudioPlayer实例,就像您在第
var\u行中所做的那样:AVAudioPlayer。别忘了把我的答案标记为有用~~哦,我明白了。我很高兴能解决这个问题!谢谢你的回答:)成功了!!我认为将AVAuiodPlayer实现为一个子类是必要的。我很好奇在什么情况下,我应该使用它吗?@ryohei当你想将这个管理器
用作
AVAudioPlayer时,就使用subclass。它将简化超类的性质和功能。说到管理器类,我更喜欢创建没有子类的类,并给它一个AVAudioPlayer实例,就像您在第
var\u行中所做的那样:AVAudioPlayer。别忘了把我的答案标记为有用~~哦,我明白了。我很高兴能解决这个问题!谢谢你的回答:)