Swift – 如何设置NSUserDefaults的初始值

我有一个名为soundSwitch的开关,我使用默认的用户保存button的状态如下:

@IBAction func soundsChanged(sender: AnyObject) { if soundSwitch.on{ defaults.setBool(true, forKey: "SoundActive") print("Sound ON") }else{ defaults.setBool(false, forKey: "SoundActive") print("Sound OFF") } } 

目前,当用户首次启动应用程序时,实际的默认值最初为false。

如果用户第一次启动应用程序并且尚未configuration它,我如何实现默认值为true。

我已经看到Objective-C中的方法,但没有在Swift中。 从我所看到的,你可以在应用程序委托中做一些如何操作,或者在一个plist文件中。 我怎么做那两个呢?

Swift 3语法示例

注册布尔默认值:

 UserDefaults.standard.register(defaults: ["SoundActive" : true]) 

获得价值:

 UserDefaults.standard.bool(forKey: "SoundActive") 

旁注:尽pipe上面的代码将返回true,但请注意,在设置该值之前,该值实际上并未写入磁盘:

 UserDefaults.standard.set(true, forKey: "SoundActive") 

使用“registerDefaults”你可以设置NSUserDefaults的默认值

 let userDefaultsDefaults = [ "SoundActive" : true ] NSUserDefaults.standardUserDefaults().registerDefaults(userDefaultsDefaults) 

注意:写在didFinishLaunchingWithOptions中,所以默认值被设置。

写下面的代码,你想检查

  let onoroff = NSUserDefaults.standardUserDefaults().objectForKey("SoundActive") as! Bool! if (onoroff != nil && onoroff == false) { self.checkForAgreement() } 

没有什么特别的swift或app委托。

初始默认值是通过在standardUserDefaults实例上调用registerDefaults:来设置的。

您可以多次进行此调用,我build议您不要在应用程序委托中执行此操作,而是在适当的时候在应用程序中注册适当的详细信息,因此,如果您有1个使用某些默认值的视图控制器/子系统,则注册默认值作为初始化的一部分,如果该代码。

只有在代码的多个不同部分使用了某些东西时,才应该考虑在应用程序代理中执行该操作,然后只有在没有其他适当的控制器的情况下才能执行该操作。

如果你真的想这样做,把它放在AppDelegate中:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let defaults = NSUserDefaults.standardUserDefaults() if defaults.valueForKey("SoundActive") == nil { defaults.setBool(true, forKey: "SoundActive") } 

如果只是在一个viewcontroller中使用,请考虑将代码放在viewDidLoad方法中!

把它放在你的AppDelegate中的“didFinishLaunchingWithOptions”中。

 if defaults.valueForKey("launchedAlready") == true { print("Not first launch.") } else { defaults.setValue(true, forKey: "launchedAlready") defaults.setBool(true, forKey: "SoundActive") print("Sound ON") } 
 func lastStatus() -> Bool { let defaultValue = true if let value = default.valueForKey("SoundActive") { // then use it return value as? Bool ?? defaultValue } else { // oh, no value? return defaultValue } } 

我认为这是使用它的最好方法。 也register(defaults:)会有所帮助,但在苹果build议使用它作为fallback文档,如分离fallbackdefault value 。 取决于你的需要。

设置并获得声音激活。

  var isSoundActivated: Bool { get { return defaults.bool(forKey: "SoundActive") } set { defaults.set(newValue, forKey: "SoundActive") defaults.synchronize() } } 

通过设置bool值

 isSoundActivated = true 

通过检查布尔值

 if isSoundActivated { print("sound activated") }