我有一个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”。对于变量。
答案 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()
}
}
}
}
希望这有帮助。