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
文档,如分离fallback
和default 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") }