如何防止布尔值在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() 

注是通过一个按钮上的主要执行此功能菜单。

希望你能花点时间看看我是否遗漏了任何东西或做了任何会导致此问题的事情。

+5

我怀疑布尔变量是“覆盖”的if语句。在if语句之前立即打印什么'print(self.mute)? - 为什么“静音”是可选的? –

+0

使用两部分的打印结果编辑帖子。 – M3o

在这一点上,你有两个选择

  • 可以解开像

    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)'") }

summary

+0

谢谢,我试过了,但在“if let mute = ...”行中出现以下错误:条件绑定的初始化程序必须具有可选类型,而不是“Bool”。@ 4x10m – M3o

+0

@ M3o检查我再次回答,我编辑 – 4x10m

+0

谢谢你的清楚解释,我必须做一些改变,以保持我猜的“最佳实践”,它工作@ 4x10m – M3o