如何在SpritKit swift Xcode中获取要保存在所有场景中的变量

时间:2015-08-09 14:09:42

标签: xcode swift

我有一个变量。我做到了所有场景(那里有三个)知道它是什么。我打电话给它"钱"并附上了一个Interger。但它不会拯救。因此,当我第二个场景增加20美元的钱时,现在这笔钱应该有20美元。当我回到第一个场景检查它不在那里它说没有钱。有没有人知道如何建立一个所有场景都可以识别的金钱系统并为此增加资金" Money"变量。有点像你如何保存高分并知道即使你关闭应用程序仍然保存高分仍然存在

1 个答案:

答案 0 :(得分:0)

管理全局变量的解决方案是Singleton类。

该类在第一次被调用时被实例化,并在应用程序的生命周期内持续存在。

该类包含提到的变量money以及虚拟字符串变量somethingElse。您可以根据需要添加任意数量的变量。

class DefaultsManager {

  // MARK: - Variables

  var money : Int = 0
  var somethingElse : String  = ""

  // MARK: - Shared Instance

  class var sharedManager : DefaultsManager {
    struct Singleton {
      static let instance = DefaultsManager()
    }
    return Singleton.instance
  }

  init()
  {
    let defaults = NSUserDefaults.standardUserDefaults()
    let defaultValues = ["money" : 0, "somethingElse" : ""];
    defaults.registerDefaults(defaultValues)
  }

  func readDefaults()
  {
    let defaults = NSUserDefaults.standardUserDefaults()
    money = defaults.integerForKey("money")
    somethingElse = defaults.stringForKey("somethingElse")!
  }

  func saveDefaults()
  {
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setInteger(money, forKey:"money")
    defaults.setObject(somethingElse, forKey:"somethingElse")
    defaults.synchronize()
  }

}

可以从任何地方访问课程。

  • 获取共享实例

    let manager = DefaultsManager.sharedManager
    
  • 获取变量money

    的值
    var currentDeposit = manager.money
    
  • 从用户默认值

    读取和写入变量
    manager.readDefaults()
    manager.saveDefaults() 
    

如果添加更多变量,则必须在init中注册它们,并根据其他变量添加行以进行读取和保存。