在AVAudioPlayer / Swift中为audiofile设置变量

时间:2015-08-12 19:38:39

标签: ios swift avaudioplayer

我有一个AVAudioPlayer,我想在变量«circuit»中播放一首歌。变量将具有保存在应用程序根目录中的歌曲名称。

class MonumentViewController: UIViewController {

    var circuit:String!

var BackgroundAudio = AVAudioPlayer(contentsOfURL:NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("dguetta", ofType: "mp3")!), error: nil)

我在下面尝试此代码,但是我收到以下错误消息:'MonumentViewController.Type'does not have a member named 'circuit'

var BackgroundAudio = AVAudioPlayer(contentsOfURL:NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(circuit, ofType: "mp3")!), error: nil)

任何帮助将不胜感激

编辑:

我已经处理了一个struct()

 struct MyVariables {


        static var pisteaudio = "dguetta"
        static var BackgroundAudio = AVAudioPlayer(contentsOfURL:NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(pisteaudio, ofType: "mp3")!), error: nil)
    }

我添加“MyVariables”。对于变量。

1 个答案:

答案 0 :(得分:0)

您不能以这种方式初始化依赖于其他属性的实例属性,尤其是在尚未创建self时。

您的<h:commandLink value="Reset" class="link" type="reset" style="margin: 20px;"> <f:ajax execute="@form" render="@form"/> </h:commandLink> 取决于BackgroundAudio变量,您使用该变量创建circuit的实例,但它本身尚未初始化。

相反,这是一个如何创建AVAudioPlayer然后将其设置为播放声音文件的示例:

AVAudioPlayer

作为旁注,请将您的变量命名为以小写字母开头并应用驼峰案例约定:

即,

class MonumentViewController: UIViewController 
{
    var circuit : String!
    var BackgroundAudio = AVAudioPlayer()

    override func viewDidLoad()
    {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        prepareAudioPlayer()
    }

    func prepareAudioPlayer()
    {
        circuit = "chopin-tristesse-in-e-major"
        //it is of good practice to always make use of error, instead of passing nil to the parameter
        var error : NSError?

        if let BackgroundAudio = AVAudioPlayer(contentsOfURL:NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(circuit, ofType: "mp3")!), error:&error)
        {
            if(error != nil)
            {
                print("Error has occurred")
            }
            else
            {
                BackgroundAudio.prepareToPlay()
                BackgroundAudio.play()
            }
        }
    }
}

希望这有帮助。