在IF语句中使用未解析的标识符

时间:2019-05-11 07:36:10

标签: swift if-statement

早晨

我正在完成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”的错误使用   “捕获”块无法访问,因为没有错误被抛出到“执行块”中

(不确定我的代码格式为何如此)

1 个答案:

答案 0 :(得分:1)

因为soundURL变量是在ifelse分支中声明的。 do块不在if语句中,因此soundURLdo块中超出范围,这就是编译器可以“看不到”。

要解决此问题,请在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")
}

现在soundURLdo块的作用域相同。