如何防止布尔值在if语句中被覆盖?
问题描述:
我试图通过检查布尔值来确定在if语句中的状态,通过键删除SKAction。如何防止布尔值在if语句中被覆盖?
我试图实现的解决方案的原因是为了让最终用户能够在应用程序中将FX音效静音。
声明:
var mute: Bool? = false
let popAction = SKAction.playSoundFileNamed("flaps", waitForCompletion: false)
let coinAction = SKAction.playSoundFileNamed("coinSound", waitForCompletion: false)
如果语句来采取行动之前确定的值,并在那里if语句运行,即使布尔是真实的问题可能是因为:
if !self.mute! {
// Run when Bool is false
self.run(self.coinAction, withKey: "coinSound")
print("Bool Value: '\(self.mute)'")
}
Bool值:false
函数删除SKAction当布尔是真实的:
func muteSound() -> Bool {
self.mute = !self.mute!
removeAction(forKey: "coinSound")
print("Bool Value: '\(self.mute)'")
return true
}
布尔值:True
运行功能:
muteSound()
注是通过一个按钮上的主要执行此功能菜单。
希望你能花点时间看看我是否遗漏了任何东西或做了任何会导致此问题的事情。
答
在这一点上,你有两个选择
-
可以解开像
var mute: Bool = false
您在 “静音” 布尔不需要添加一个“? “因为你初始化“静音”为假(而不是零(我推断,你永远不会分配“静音”为零))。
-
如果你想保留“?”你必须解开“静音”并对其进行测试
if let mute = self.mute, !self.mute { // Run when Bool is false self.run(self.coinAction, withKey: "coinSound") print("Bool Value: '\(self.mute)'") }
我怀疑布尔变量是“覆盖”的if语句。在if语句之前立即打印什么'print(self.mute)? - 为什么“静音”是可选的? –
使用两部分的打印结果编辑帖子。 – M3o