2016-04-24 4 views
0

У меня этот файл и вы хотите использовать этот файл в другом классе, но это не сработает. Я предполагаю, что это связано с тем, что я не инициализировал AVAudioPlayer в этом файле, поэтому я решил с этим, но появилось сообщение, в котором говорилось: "Call can throw, but it is not marked with 'try' and the error is not handled" Моя реализация не увенчалась успехом. Я понятия не имею, как с этим бороться. Не могли бы вы указать, что не так с инициализацией, и предоставить мне код, который работает. Заранее спасибо.Как инициализировать AVAudioPlayer в Swift

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

} 

ответ

1

Я рекомендую использовать этот способ инициализации вас менеджером, он не должен быть подклассом 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() 
    } 
} 

Использование let manager = SoundManager(fileName: "hello") manager.playSound()

+0

Работали !! Я думал, что необходимо реализовать AVAuiodPlayer в качестве подкласса. Мне любопытно, в какой ситуации я должен использовать его тогда? – bagels

+0

@ryohei Если вы хотите использовать этот менеджер 'as' AVAudioPlayer, используйте подкласс. Он уничтожит свойство и функции суперкласса. Когда дело доходит до класса менеджера, я предпочитаю создавать класс без подкласса и давать ему экземпляр AVAudioPlayer, как в строке 'var _Sound: AVAudioPlayer!'. Не забудьте отметить мой ответ как полезный ~~ – BrikerMan

+0

О, я вижу. Я рад решить эту проблему! Спасибо за Ваш ответ :) – bagels

Смежные вопросы