Ios 我的应用程序关闭后保存变量(swift)

Ios 我的应用程序关闭后保存变量(swift),ios,xcode,swift,variables,nsuserdefaults,Ios,Xcode,Swift,Variables,Nsuserdefaults,我正试图在Xcode中保存一个变量,这样即使在应用程序关闭后它也会保存,无论何时当我访问它时,我都会从几个不同的类和文件中进行操作,当我访问它时,我会更改变量的值。因此,类似的线程并不完全适用,要存储的值是一个字符串,以下是我迄今为止的代码: var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() defaults.setObject(Token, forKey: "") as! String 我相信这是正确的格

我正试图在Xcode中保存一个变量,这样即使在应用程序关闭后它也会保存,无论何时当我访问它时,我都会从几个不同的类和文件中进行操作,当我访问它时,我会更改变量的值。因此,类似的线程并不完全适用,要存储的值是一个字符串,以下是我迄今为止的代码:

var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(Token, forKey: "") as! String
我相信这是正确的格式,但我不知道如何调用它来更改它,因为当我尝试时,我会收到一条错误消息,上面显示expected declaration


无论如何,任何帮助都将不胜感激。

在设置值后添加
default.synchronize()

假设您有一个名为
token的字符串变量

要在设备上保存/更新存储的值,请执行以下操作:

NSUserDefaults.standardUserDefaults().setObject(token, forKey: "mytoken")
NSUserDefaults.standardUserDefaults().synchronize()
let token = NSUserDefaults.standardUserDefaults().objectForKey("mytoken") as? String
在上面的代码中,我确保给键一个值(“mytoken”)。这是为了我们以后能找到它

要从设备读取存储值,请执行以下操作:

NSUserDefaults.standardUserDefaults().setObject(token, forKey: "mytoken")
NSUserDefaults.standardUserDefaults().synchronize()
let token = NSUserDefaults.standardUserDefaults().objectForKey("mytoken") as? String

由于方法
objectForKey
返回可选的
AnyObject
,我将确保将其转换为可选的
字符串(可选的意思是它要么为nil,要么有值)。

首先必须指定一个唯一的键来存储变量(在示例
MyKey
中)

AppDelegate>applicationdFinishLaunching
中,使用默认值注册密钥。
好处是您可以使用非可选变量,并且您有一个定义的默认值

let defaults = UserDefaults.standard
let defaultValue = ["MyKey" : ""]
defaults.register(defaults: defaultValue)
现在,您可以从任何地方读取键的值

let defaults = UserDefaults.standard
let token = defaults.string(forKey: "MyKey")
并保存它

let defaults = UserDefaults.standard
defaults.set(token, forKey: "MyKey")

Swift 3

(感谢瓦迪安的回答)

AppDelegate>applicationdFinishLaunching
中:

    let defaults = UserDefaults.standard
    let defaultValue = ["myKey" : ""]
    defaults.register(defaults: defaultValue)
要保存密钥,请执行以下操作:

let defaults = UserDefaults.standard
defaults.set("someVariableOrString", forKey: "myKey")
defaults.synchronize()
要读取密钥,请执行以下操作:

    let defaults = UserDefaults.standard
    let token = defaults.string(forKey: "myKey")

什么是
!字符串
for?我觉得有必要把它变成字符串?我对swift有点陌生诚实如何更改值,很抱歉我在这里完全迷路了你能说得更具体一点吗?调用
synchronize()
是不必要的。我将此代码添加到Appdelegate,然后当值更改时,我将添加两行,对吗?当您要将令牌保存到设备时,在代码中的任何位置添加两行(setObject…和synchronize…),是的。您不需要同步。事实上,强制这样做可能是个问题。在文档和许多问答中都有解释。示例:Soooo,我什么时候想要更改值?我应该怎么做?读取值,更改它,然后从任何你想要的地方写回来。通常,该值在视图控制器的
viewDidLoad()
viewwillispect()
中读取到实例变量中。此实例变量可以更改并可以写回,例如,当视图控制器离开时,在
viewwilldemouse()
中。sooo'let defaults=NSUserDefaults.standardUserDefaults()let token=defaults.stringForKey(global.token)'作为新值的全局标记吗,但是如果您想修改
标记
请使用
var标记
。请同时阅读文档:当应用程序重新打开时,我将如何获取值您不需要
同步
。事实上,强制这样做可能是个问题。在文档和许多问答中都有解释。例子: