早晨
我正在完成Udemy AppBrewer课程之一,而我一直在研究如何解决其中的一项工作。我做了我认为合乎逻辑的事情,但是返回了错误。
使用Swift Im尝试播放一个声音,方法是使用标签值来定义要播放的声音,方法是按下一个按钮。当我没有创建任何条件时,代码就可以工作。
我正在尝试使用IF语句检查标签值,然后做出决定。
我的问题是我得到了“未解析的标识符的使用”,它在审阅时听起来好像无法理解我的一个变量(条件中的一个)。我不明白为什么会这样,而且我没有足够的知识来迅速剖析它
在Ive插入IF语句时不会出现这种情况
@IBAction func notePressed(_ sender: UIButton)
{
if sender.tag == 1 {
let soundURL = Bundle.main.url(forResource: "note1", withExtension: "wav")
}
else {
let soundURL = Bundle.main.url(forResource: "note2", withExtension: "wav")
}
do {
audioPlayer = try AVAudioPlayer(contentsOf: soundURL!)
}
catch {
print(error)
}
audioPlayer.play()
}
}
这是错误代码:
未解决的标识符“ soundURL”的错误使用 “捕获”块无法访问,因为没有错误被抛出到“执行块”中
(不确定我的代码格式为何如此)
答案 0 :(得分:1)
因为soundURL
变量是在if
和else
分支中声明的。 do
块不在if
语句中,因此soundURL
在do
块中超出范围,这就是编译器可以“看不到”。
要解决此问题,请在soundURL
语句之外声明if
:
let soundURL: URL?
if sender.tag == 1 {
soundURL = Bundle.main.url(forResource: "note1", withExtension: "wav")
}
else {
soundURL = Bundle.main.url(forResource: "note2", withExtension: "wav")
}
现在soundURL
与do
块的作用域相同。