2017-02-14 97 views
0

我試圖通過檢查布爾值來確定在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

回答

0

在這一點上,你有兩個選擇

  • 可以解開像

    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