2016-10-30 43 views
2

我對swift有點新,我需要幫助保存一個int變量來保存用戶收集的硬幣,並在應用程序關閉後保存它,所以這裏是我做的,我有兩個場景之一代表具有硬幣可變(因此我可以很容易地從另一個場景控制它)的結構的startMenu,另一個場景是GameScene,並且在GameScene中,每當用戶與硬幣節點交互時,它添加1到的StartMenu保存硬幣變量在swift 3

在StarMenu場景

這裏的硬幣變量在我的結構

struct Variables { 

    static var CoinsCollected = 0 


} 

,這裏是我的所作所爲使我T爲保存

let defaults = UserDefaults.standard 
    defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected") 
    defaults.synchronize() 

,我有我的didbegin接觸裏面GameScene這一行,當用戶用硬幣

Variables.CoinsCollected += 1 

相互作用,我有這個行會更新變量

硬幣的labelnode
coinsCollectedLabel = SKLabelNode(text: "coins: \(Variables.CoinsCollected)") 

和一切工作正常,但它不會得到保存,我知道我失去了一些東西,我試着讀了很多人的問題,但同樣的問題,但它d idn't工作,所以如果任何你們可以幫助我,我將不勝感激

+2

你有代碼*保存*你的'CoinsCollected',但你有代碼來*從'UserDefaults'加載*嗎? – Danoram

+0

@danorm我編輯了我的問題,我有這條線,但我不知道這是你在說什麼 –

+1

檢查這個答案:http://stackoverflow.com/a/40330947/1689376 – alexburtnik

回答

1

您可以在Variables類這樣做,所以你的硬幣始終保存在持久性文件:

class Variables { 

    static let userDefaults = UserDefaults.standard 

    struct Constants { 
     static let CoinsCollectedKey = "CoinsCollected" 
    } 

    static var CoinsCollected: Int { 
     get { 
      return userDefaults.integer(forKey: self.Constants.CoinsCollectedKey) 
     } 

     set(value) { 
      userDefaults.setValue(value, forKey: self.Constants.CoinsCollectedKey) 
     } 
    } 
} 
+0

非常感謝您的幫助! –

1
let defaults = UserDefaults.standard 

... 
//after Initializing Variables Instance 

//get saved value 
guard Variables.CoinsCollected = defaults.integer(forKey: "CoinsCollected") else { 
    print("Previously saved coins don't exist") 

    //create UserDefaults value for coins 
    defaults.set(Variables.CoinsCollected, forKey: "CoinsCollected") 
} 

我認爲這將是值得保存您的整個變量對象,而不是,這樣就可以讓你添加任何新的價值您struct後 - 在這種情況下,你應該使用(例如)系列化你Variables對象

//set object 
defaults.set(Variables, forKey: "Variables") 
//read object 
let variables: Variables = defaults.object(forKey: "Variables") 

//theoretically you should now be able to get CoinsCollected value within your retrieved object~ 
//e.g. 
print(variables.CoinsCollected) 
+0

寫一個[didSet](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html)可能是值得的。非常感謝您的幫助! –

+0

沒問題〜我認爲@marosoaie的答案比我的更好,更聰明。祝你好運! – Danoram